18.类和对象
1.对象方法
"""
定义在类里面的函数
1)怎么定义:直接定义(不需要添加装饰器)在类中的函数就是对象方法
2)怎么调用:通过 "对象.xx()" 的形式调用
3)特点是什么:每个对象方法都有一个默认参数self,self不需要传参,
系统会自动将当前对象传给self(self谁调用就指向谁)
"""
class Person:
def eat(self,name='二娃'):
print(f'{name}正在吃吃饭')
p1 = Person()
p1.eat()
2.初始化方法 - init
"""
__init__:是python类中一个特殊的对象方法,也是魔法方法。
魔法方法:类中方法以__开头并且以__结尾,系统自带。魔法方法不需要主动调用,系统会在特定的情况下自定调用。
1) __init__ 方法会在创建对象的时候被自动调用
2) 通过类创建对象的时候需不需要参数,看__init__的参数有几个参数。
"""
2.属性
1.类中的属性
"""
1)类属性
a.怎么定义: 直接定义在类中的变量就是类属性
b.怎么使用:通过类.xx的方式
c.什么时候用:属性值不会因为对象不同而不一样的时候就使用类属性
2)对象属性
a.怎么定义:以"self.xx = 值"的形式定义在__init__方法中
b.怎么使用: 通过
c.什么时候用:属性值会因为对象不同而不同而不一样的时候就使用对象属性
"""
class A:
a = 10
name = '阿达'
def __init__(self, name, age=28, gender='男'):
self.name = name
self.age = age
self.gender = gender
self.x_labsl = []
self.y_labsl = []
def nen(self, hobby='耍大炮'):
print(f'我是{self.name},{self.gender},今年{self.age}岁')
print(f'嗜好:{hobby}')
print(A.a)
print(A.name)
x = A('邱新海', 21)
x.nen()
2.对象属性默认值
"""
1)方式1:使用固定值(主要用于这个属性值在绝大多部分情况下都是一个值,极少数情况会变化的时候)
2)方式2:在__init__中提供给这个属性赋值形参,形参没有默认值(属性一般都不要样的时候,创建一个属性值)
"""
class P:
pi = 3.1415926
def __init__(self, r):
self.r = r
def area(self):
""" 计算圆面积"""
return '半径为:{self.r}时,面积:{P.pi * self.r ** 2 :.2f}'
def perimeter(self):
""" 计算圆周长"""
return '半径为:{self.r}时,周长:{2 * P.pi * self.r:.2f}'
p = P(5.67)
p.area()
p.perimeter()
3.方法
-
方法
"""
1)对象方法:
a.怎么定义:直接定义
b.怎么调用:对象.xx()
c.特点:self
d.什么时候用:如果要使用对象属性,就使用对象方法
2)类方法:
a.怎么定义:定义函数前加@classmethod装饰器
b.怎么调用:类.xx()
c.特点:自带参数cls,调用的时候不用传参,系统会把当前类传给cls
d.什么时候用:在不需要对象属性的情况下需要类就使用类方法
3)静态方法:
a.怎么定义:定义函数前加@staticmethod装饰器
b.怎么调用:类.xx()
c.特点:没有特点
d.什么时候用:实现函数功能什么(类方法,对象方法)也不需要,就使用静态方法
"""
class A:
def func1(self):
print('对象方法')
@classmethod
def func2(cls):
print('类方法')
@staticmethod
def func3():
print('静态方法')
a = A()
a.func1()
A.func2()
A.func3()
4.对象属性的增删改
class A:
def __init__(self, name, stuid, age=18):
self.name = name
self.age = age
self.stuid = stuid
self.score = 0
def __repr__(self):
return str(self.__dict__)
def n(self, score):
return f"名字:{self.name}| 年龄:{self.age}| 学号:{self.stuid}| 分数:{self.score + score}"
a = A('曾睿', 'stu001')
print(a)
print(a.n(23))
1.查 - 获取属性值
"""
对象.对象属性名 - 获取指定属性对应的值,属性不存在会报错
getattr(对象,属性名) - 获取指定属性对应的值,属性不存在会报错
getattr(对象,属性名,默认值) - 获取指定属性对应的值,属性不存在返回默认值
"""
2.增、改
"""
对象.属性 = 值 - 如果存在就修改,不存在就添加
setattr(对象,属性名,值) - 如果存在就修改,不存在就添加
"""
3.删除
"""
del 对象.属性 - 没有就报错
delattr(对象,属性名) -
"""
4 slots 属性
class B:
__slots__ = ('a', 'b', 'c')