请不要因为别人都在交卷自己就乱写答案
声明
仅作为个人学习使用,仅供参考
什么是类中的属性、方法
我们用 class 定义类
类的 属性 就是定义在类中的 变量
类的 方法 就是定义在类中的 函数(def)
class example1: 类的属性
a = 1
b = 2
c = 3
def example2(self): 类的方法
pass
定义类、为类添加属性
使用class 定义
如上a,b,c就是添加属性
类的实例化
d = expample1() 即为类的实例化
class example1:
a = 1
b = 2
c = 3
def example2(self):
pass
d = example1() 实例化
实例化后 d与属性a,b,c就形成了一种从属关系,即可用 '.' 连接
例如
print(d.a) 输出1
print(d.b) 输出2
print(d.c) 输出3
d 作为 类example1的 实例
输出 d 和 d 的类型就可以看出之间的关系
class example1:
a = 1
b = 2
c = 3
def example2(self):
pass
d = example1()
print(d) <__main__.example1 object at 0x0000020E8C100C50>
print(type(d))
type(d) 返回 <class '__main__.example1'>
__main__ 是我们当前运行的main.py文件
example1 是我们在文件中定义的example1类
. 表明从属关系
即 变量 d 属于当前文件中所定义的 example1 类型
直接运行的文件 就是__main__
注意
什么是self,在后文可以见到
在类中
实例名 其实和 self 是一样的,
有 def 的话 第一个传入的值就是实例名
(当然如果你把self放在第一位 那self就是实例名)
输出self或者实例名 都会显示如上内存地址
例如 <__main__.example1 object at 0x0000020E8C100C50>
你可以通过__str__来控制self的输出
属性的修改
实例化后 对属性进行重新赋值
class example1:
a = 1
b = 2
c = 3
def example2(self):
pass
d = example1()
d.a = 100
print(d.a) 输出100
e = example1()
print(e.a) 输出1
当然 其他实例的 .a 肯定还是1
方法定义与调用
前面已经说过 方法 就是类中的def
在 调用方法 时,Python 会 强制性 地将 实例对象本身 传递给类方法的 第一个参数,
我们习惯性的把第一个参数设置为 self ,那么 self 就是实例对象本身
class example1:
a = 1
b = 2
c = 3
def example2(self,a,b,c):
self.a = a
self.b = b
self.c = c
print('成功调用')
d = example1()
d.example2(1,2,3)
def中有四个参数 可我们传入的只有三个参数
实际上
self 为 d
a 为 1
b 为 2
c 为 3
证明猜想 class example1: a = 1 b = 2 c = 3 def example2(self,a,b,c): self.a = a self.b = b self.c = c print('成功调用') print(self) d = example1() d.example2(1,2,3) print(d)
可见我们的猜测是正确的 第一个传入的值 = self = 实例对象本身
另外一种调用方法
d = example1()
d.example2(1,2,3)
d=example1()
example.example2(d,1,2,3)
__init__()
方法
实例化新的对象时 自动调用
class example1:
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
print('成功调用')
print(a)
#d = example1()
#d.example2(1,2,3)
#example1.example2(d,1,2,3)
不需要实例化 直接一条代码解决实例化+赋值
d = example1(1,2,3)
输出1
__str__()方法
前文不是说 输出 self 或实例对象本身会输出内存地址吗
通过__str__解决
class example1: def __str__(self): return '这才是我的想要的' def __init__(self,a,b,c): self.a = a self.b = b self.c = c print('成功调用') print(self) d = example1(1,2,3) print(d)
取类名的代码规范
类取名需要 首字母大写,以便和函数名区分开来
d = example1(1,2,3)
编写了 init()
方法后我们再实例化 example1
类时,看起来很像在调用一个名为 example1
的函数。
为避免引发歧义,凸显出类是一个整体性的概念,Python 官方建议为类取名时 首字母大写,以便和函数名区分开来。如果所要描述的类不能用单个单词表达,则每个单词的首字母都需要大写,比如 FilmSelector
因此我们最好改成 Example1 , 以便于区分 类名与函数名
class Example1:
pass