Skip to content

Commit bbfb267

Browse files
committedMay 1, 2020
Refactor catalog
1 parent 7409b10 commit bbfb267

File tree

11 files changed

+351
-4
lines changed

11 files changed

+351
-4
lines changed
 

‎Python3_Tutorial/.vscode/settings.json

-3
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env python
2+
#-*- coding:utf-8 -*-
3+
# Author: liuchuan
4+
# Contact: liuchuan910927@gmail.com
5+
# File: lc_01_ first_object_oriented.py
6+
# Datetime: 2019/11/3 18:12
7+
# Software: PyCharm
8+
9+
10+
# ------------------ Python3 面向对象 ------------------
11+
12+
13+
"""
14+
面向对象
15+
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
16+
方法:类中定义的函数。
17+
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
18+
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
19+
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
20+
局部变量:定义在方法中的变量,只作用于当前实例的类。
21+
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
22+
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
23+
实例化:创建一个类的实例,类的具体对象。
24+
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
25+
26+
"""
27+
28+
29+
class Cat:
30+
'''一个简单的类实例'''
31+
age = 5
32+
def eat(self):
33+
print("小猫爱吃鱼")
34+
35+
def drink(self):
36+
print("小猫爱喝水")
37+
38+
# 创建\实例化猫对象
39+
tom = Cat()
40+
print("Cat 类的属性:", tom.age)
41+
print("Cat 类的方法:", tom.eat())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
#!/usr/bin/env python
2+
#-*- coding:utf-8 -*-
3+
# Author: liuchuan
4+
# Contact: liuchuan910927@gmail.com
5+
# File: Class_attributes_and_methods.py
6+
# Datetime: 2018/11/3 17:44
7+
# Software: PyCharm
8+
9+
10+
# ----------- 类属性 与 方法-------
11+
12+
'''
13+
Python3 中类的静态方法、普通方法、类方法
14+
15+
静态方法: 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。
16+
17+
普通方法: 默认有个self参数,且只能被对象调用。
18+
19+
类方法: 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器。
20+
21+
'''
22+
23+
24+
'''
25+
类的私有属性:
26+
__private_attrs: 两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
27+
28+
'''
29+
30+
class JustCounter:
31+
__secretCount = 0 # 私有变量
32+
publicCount = 0 # 公开变量
33+
34+
def count(self):
35+
self.__secretCount += 1
36+
self.publicCount += 1
37+
print(f'私有属性为: {self.__secretCount}')
38+
39+
40+
counter = JustCounter()
41+
counter.count()
42+
print(f'公开属性为: {counter.publicCount}')
43+
44+
# print(counter.__secretCount) # 报错,实例不能访问私有变量
45+
46+
47+
'''
48+
类的方法:
49+
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
50+
self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。
51+
52+
普通方法: 默认有个self参数,且只能被对象调用。
53+
类方法: 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器。
54+
55+
'''
56+
57+
class Tool(object):
58+
59+
# 使用赋值语句定义类属性,记录所有工具对象的数量
60+
count = 0
61+
62+
@classmethod
63+
def show_tool_count(cls): # 类方法
64+
print("工具对象的数量 %d" % cls.count)
65+
66+
def __init__(self, name):
67+
self.name = name
68+
Tool.count += 1 # 让类属性的值+1
69+
70+
71+
# 创建工具对象
72+
tool1 = Tool("斧头")
73+
tool2 = Tool("榔头")
74+
75+
# 调用类方法
76+
Tool.show_tool_count() # 类调用
77+
tool1.show_tool_count() # 对象调用
78+
79+
80+
# 静态方法
81+
class Classname:
82+
@staticmethod
83+
def fun():
84+
print('静态方法')
85+
86+
@classmethod
87+
def a(cls):
88+
print('类方法')
89+
90+
# 普通方法
91+
def b(self):
92+
print('普通方法')
93+
94+
95+
96+
# Classname.fun() # 直接类名调用
97+
# Classname.a()
98+
99+
C = Classname()
100+
C.fun()
101+
C.a()
102+
C.b()
103+
104+
105+
106+
'''
107+
类的私有方法:
108+
__private_method: 两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。
109+
110+
'''
111+
class Date:
112+
113+
def __today(self): # 类的私有方法
114+
print("这是类的私有方法")
115+
116+
def test2(self):
117+
self.__today()
118+
119+
a = Date()
120+
# a._today() 私有方法不能直接调用
121+
a.test2()
122+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env python
2+
#-*- coding:utf-8 -*-
3+
# Author: liuchuan
4+
# Contact: liuchuan910927@gmail.com
5+
# File: Initialization_method.py
6+
# Datetime: 2018/11/3 16:39
7+
# Software: PyCharm
8+
9+
10+
# ----------- 初始化方法 -----------
11+
12+
# 创建一个名为Person的类,使用__init __()函数为名称和年龄分配值:
13+
class Person:
14+
15+
# __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上
16+
def __init__(self, name, age):
17+
self.name = name
18+
self.age = age
19+
20+
p1 = Person("John", 26)
21+
print(p1.name)
22+
print(p1.age)
23+
24+
# 注意:使用类名()创建对象的时候,会自动调用初始化方法 __init__()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env python
2+
#-*- coding:utf-8 -*-
3+
# Author: liuchuan
4+
# Contact: liuchuan910927@gmail.com
5+
# File: Object_Methods.py
6+
# Datetime: 2018/11/3 16:48
7+
# Software: PyCharm
8+
9+
10+
# ------------- 类的方法 --------------
11+
12+
# 在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
13+
14+
class People:
15+
16+
# 定义基本属性
17+
name = ''
18+
age = 0
19+
__weight = 0 # 定义私有属性,私有属性在类外部无法直接进行访问, 下划线变量为: 私有属性
20+
21+
# 定义构造方法
22+
def __init__(self, name, age, weight):
23+
self.name = name
24+
self.age = age
25+
self.__weight = weight
26+
27+
def speak(self):
28+
print("%s说: 我今年%d岁,体重%d千克。" % (self.name, self.age, self.__weight))
29+
30+
# 实例化类
31+
p = People('小明', 28, 68)
32+
p.speak()
33+
34+
35+
# 8.类的专有方法:
36+
37+
"""
38+
__init__ : 构造函数,在生成对象时调用
39+
__del__ : 析构函数,释放对象时使用
40+
__repr__ : 打印,转换
41+
__setitem__ : 按照索引赋值
42+
__getitem__: 按照索引获取值
43+
__len__: 获得长度
44+
__cmp__: 比较运算
45+
__call__: 函数调用
46+
__add__: 加运算
47+
__sub__: 减运算
48+
__mul__: 乘运算
49+
__truediv__: 除运算
50+
__mod__: 求余运算
51+
__pow__: 乘方
52+
53+
"""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#!/usr/bin/env python
2+
#-*- coding:utf-8 -*-
3+
# Author: liuchuan
4+
# Contact: liuchuan910927@gmail.com
5+
# File: Inheritance.py
6+
# Datetime: 2018/11/3 17:16
7+
# Software: PyCharm
8+
9+
# -------------- 继承 --------------
10+
11+
12+
# Python同样有限的支持多继承形式。多继承的类定义形如下例: 需要注意圆括号中 父类 的顺序
13+
14+
# 子类拥有父类的所有属性和方法
15+
16+
class Animals:
17+
18+
def eat(self):
19+
print("吃---")
20+
21+
def drink(self):
22+
print("喝---")
23+
24+
def run(self):
25+
print("跑---")
26+
27+
def sleep(self):
28+
print("睡---")
29+
30+
31+
# 1.单继承示例
32+
class Dog(Animals):
33+
34+
def bark(self):
35+
print("汪汪叫")
36+
37+
38+
# 2.多重继承
39+
class Cat(Dog, Animals):
40+
41+
def __init__(self, name):
42+
self.name = name
43+
44+
def game(self):
45+
print("%s飞到天上去玩耍..." % self.name)
46+
47+
48+
# 创建一个对象 - 狗对象
49+
wangcai = Dog()
50+
wangcai.bark()
51+
52+
# 调用父类的方法
53+
wangcai.eat()
54+
wangcai.drink()
55+
wangcai.run()
56+
wangcai.sleep()
57+
58+
# 创建一个猫对象
59+
cat = Cat('tom')
60+
cat.game()
61+
62+
63+
# 3.方法重写
64+
class Parent: # 定义父类
65+
66+
def myMethod(self):
67+
print('调用父类方法')
68+
69+
70+
class Child(Parent): # 定义子类
71+
def myMethod(self):
72+
print('调用子类方法')
73+
74+
75+
c = Child() # 子类实例
76+
c.myMethod() # 子类调用重写方法
77+
78+
79+
'''
80+
super(type[, object-or-type])
81+
参数
82+
type -- 类。
83+
object-or-type -- 类,一般是 对象
84+
'''
85+
86+
# super() 函数是用于调用父类(超类)的一个方法。用子类对象调用父类已被覆盖的方法
87+
super(Child, c).myMethod()

‎Python3_Tutorial/Errors_and_exceptions.py renamed to ‎Python3_Tutorial/14-Errors_And_exceptions/lc-01-Errors_and_exceptions.py

+24-1
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,27 @@
4242
except ZeroDivisionError as error: # 不能被0整除(输入0时,打印的错误信息)
4343
print(error)
4444
except ValueError as error: # 类型错误(输入非数字时,打印的错误信息)
45-
print(error)
45+
print(error)
46+
47+
48+
'''
49+
try/except...else
50+
try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
51+
52+
else 子句将在 try 子句没有发生任何异常的时候执行。
53+
54+
'''
55+
56+
57+
# 以下实例在 try 语句中判断文件是否可以打开,如果打开文件时正常的没有发生异常则执行 else 部分的语句,读取文件内容:
58+
59+
for arg in sys.argv[1:]:
60+
try:
61+
f = open(arg, 'r')
62+
except IOError:
63+
print('cannot open', arg)
64+
else:
65+
print(arg, 'has', len(f.readlines()), 'lines')
66+
f.close()
67+
68+
# 使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常。

0 commit comments

Comments
 (0)
Please sign in to comment.