python类
类是由属性和行为组成的,属性称为成员变量,行为称为成员方法。属性和方法又类似名词和动词,名词便是变量,用来定义类的属性,动词便是方法,用来针对类执行不同的操作。
语法:
class 类名:
属性
行为
python对象
对象就是通过类,并继承类的属性和行为。
- 创建一个类并使用。
class people:
name = None
age = None
hobby = None
# 创建一个对象
peop1 = people()
peop1.name = "小明",
peop1.age = 18
peop1.hobby = "敲代码"
print(type(peop1)) # <class '__main__.people'>
print(peop1.name) # ('小明',)
print(peop1.age) # 18
print(peop1.hobby) # 敲代码
- 在类中定义类的行为(函数)。
在类中定义方法和定义函数基本一致,但是也有一些区别,语法 def 方法名(self, 形参1,...形参n): self是必传的,但是对其他参数并不影响。
self:
- 它用来表示类对象自身。
- 当我们使用类对象调用方法的时候,self会自动被python传入。
- 在方法内部,想要访问类的成员变量,必须使用self。
class people:
name = None
age = None
hobby = None
def intr(self):
print(f"你好,我叫{self.name},今年{self.age}岁了,我的爱好是:{self.hobby}")
def occupation(self, msg):
print(f"大家好,我是工作时长两年半的{msg}!")
cxk = people()
cxk.name = "鸡哥"
cxk.age = 18
cxk.hobby = "打篮球"
cxk.intr() # 你好,我叫鸡哥,今年18岁了,我的爱好是:打篮球
cxk.occupation("攻城狮") # 大家好,我是工作时长两年半的攻城狮!
通过继承类实现的对象是互不影响的。
# 通过类构建的对象是互不干扰的.
hero = people()
hero.name = "王拿铁"
hero.age = 19
hero.hobby = "敲代码"
hero.intr() # 你好,我叫王拿铁,今年19岁了,我的爱好是:敲代码
hero.occupation("攻城狮") # 大家好,我是工作时长两年半的攻城狮!
构造方法
python类中可以使用__init__()方法,称之为构造方法
- 对象的参数会依次传给构造方法,然后依次给成员变量赋值
- 在创建类对象(构造类) 的时候,会自动执行
- 在创建类对象(构造类) 的时候,将传入的参数自动传递给__init__方法使用
class people:
def __init__(self, name, age, hobby):
self.name = name
self.age = age
self.hobby = hobby
def intr(self):
print(f"你好,我叫{self.name},今年{self.age}岁了,我的爱好是:{self.hobby}")
def occupation(self, msg):
print(f"大家好,我是工作时长两年半的{msg}!")
cxk = people("鸡哥", 18, "打篮球") # 参数会依次传入构造方法中,成为类的属性
cxk.intr() # 你好,我叫鸡哥,今年18岁了,我的爱好是:打篮球
cxk.occupation("攻城狮") # 大家好,我是工作时长两年半的攻城狮!
私有变量和私有方法
私有变量或者私有方法,在名称前使用双下滑线定义,对于私有属性:外部不可以访问,会报错,可以操作,但无效。对于私有方法,外部不可以操作,会报错。私有变量只能在类内部使用,
class people:
__age = 19
def __sayHi(self):
print("你好")
def sayHello(self):
print(self.__age)
self.__sayHi()
cxk = people()
# print(cxk.__age) # AttributeError: 'people' object has no attribute '__age'
# cxk.__sayHi() # AttributeError: 'people' object has no attribute '__sayHi'
cxk.sayHello()
扩展:
如果参数有很多,可使用如下方式传递,但有一定的使用性问题,传递的参数必须是以键值对方式传递的,且在函数内无法提前预知会设置的属性。
setattr() 是Python中的一个内置函数,用于设置对象的属性值。它接受三个参数:第一个参数是对象,第二个参数是字符串形式的属性名或方法名,第三个参数是要设置的属性或方法的值或引用。
class people:
def __init__(self, **kwargs):
for item in kwargs:
setattr(self, item, kwargs[item])
cxk = people(name="鸡哥", age=18, hobby="打篮球")