'''
1.類:擁有相同功能和相同屬性的對(duì)象的集合 - 類是抽象
對(duì)象:就是類的實(shí)例 - 對(duì)象是具體
'''
2.類的聲明
'''
1)語法
class 類名:
類的內(nèi)容
2)說明
class - 關(guān)鍵字
類名 - 隨便命名;是標(biāo)識(shí)符但不能是關(guān)鍵字(要求)
采用駝峰式命名宰衙,并且首字母大寫.例如:StudentName
見名知義
類的內(nèi)容 - 包含類的說明文檔蟹肘、類中的函數(shù)(相同的功能)呻拌、類中的屬性(相同的屬性)
'''
class Person:
"""類的說明文檔:人類"""
def eat(self):
print('吃飯')
##### 3.創(chuàng)建對(duì)象
'''
1)
對(duì)象 = 類()
'''
p1 = Person()
# 同一個(gè)類可以有多個(gè)對(duì)象
p2 = Person()
對(duì)象方法
1.類中的函數(shù)
'''
聲明在類中的函數(shù)又叫方法衫生, 類中的方法分為三種:對(duì)象方法惭笑、類方法鼎兽、靜態(tài)方法
1)對(duì)象方法
直接聲明在類中的函數(shù)熊咽,自帶一個(gè)self參數(shù)。
對(duì)象方法需要通過'對(duì)象.函數(shù)名()'的方式來調(diào)用
通過對(duì)象調(diào)用對(duì)象方法的時(shí)候潦匈,self不需要傳參阱高;系統(tǒng)會(huì)自動(dòng)將當(dāng)前對(duì)象傳給self(誰調(diào)用指向誰)
'''
class Person:
def eat(self):
# self = p1
print('吃飯')
def run(self):
# self = p1
print('跑步')
def study(self, subject: str):
print('學(xué)習(xí)'+subject)
p1 = Person()
p1.eat()
p1.run()
p1.study('python')
強(qiáng)調(diào): 不要用類去調(diào)用對(duì)象方法
1.init方法
'''
init 是類中的一個(gè)魔法方法,在創(chuàng)建對(duì)象的時(shí)候自動(dòng)調(diào)用
如果init方法中除了self以外還有其他參數(shù)茬缩,需要通過構(gòu)造方法來給__ init__方法傳參
'''
class Person:
def __init__(self):
print('init方法被調(diào)用')
p1 = Person() # Person()1.開辟空間創(chuàng)建對(duì)象 2.使用創(chuàng)建好的對(duì)象調(diào)用init方法(做一些初始化操作)3.返回對(duì)象
p2 = Person()
類中的屬性
1.類中的屬性:對(duì)象屬性赤惊、字段
'''
1)字段:聲明在類的里面函數(shù)的外面的變量,就是類的字段
怎么使用:通過'類.字段'的方式去使用
什么時(shí)候用:屬性值不會(huì)因?yàn)閷?duì)象不同而不一樣寒屯,這樣的屬性就聲明成類的字段
2)對(duì)象屬性
a.怎么聲明:以'self.屬性名 = 值'的方式聲明init方法中
b.怎么使用:通過'對(duì)象.屬性名'的方式去使用
c.什么時(shí)候用:屬性值會(huì)因?yàn)閷?duì)象不同而不一樣荐捻,這樣的屬性就聲明成對(duì)象屬性
'''
class Person:
# num就是類的字段
num = 61
def __init__(self):
# name,age, gender就是Person類的對(duì)象屬性
self.name = ''
self.age = 0
self.gender = '男'
print(Person.num)
Person.num = 100
print(Person.num)
p1 = Person()
p1.name = '帥'
p2 = Person()
p2.name = '小帥'
print(p1.name, p2.name)
class Dog:
def __init__(self, name1, age1, color1, breed1):
self.name = name1
self.age = age1
self.color = color1
self.breed = breed1
dog1 = Dog('老豬', 3, '黃色', '土狗')
print(dog1.name)
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
self.score = 0
self.study_id = '001'
def __repr__(self):
return '<%s>' % str(self.__dict__)[1:-1]
# 重寫repr方法,來定制對(duì)象的打印格式(默認(rèn)對(duì)象地址)
# 返回值必須是字符串
stu1 = Student('小明', '15424312')
print(stu1.age)
stu1.score = 100
print(stu1.score)
練習(xí):聲明一個(gè)矩形類寡夹, 有屬性:長和寬, 方法:計(jì)算矩形的周長和面積
class Rect:
def __init__(self, long, wide):
self.long = long
self.wide = wide
# self.perimeter = (long + wide) * 2
# self.area = long * wide
def get_area(self):
return self.long * self.wide
def get_perimeter(self):
return (self.long+self.wide)*2
p1 = Rect(5, 2)
print(p1.get_area())
print(p1.get_perimeter())
class Person:
def __init__(self, name, age=0):
self.name = name
self.age = age
def eat(self, food):
print('%s在吃%s' % (self.name, food))
p1 = Person('小明', 18)
p2 = Person('小紅', 20)
p1.eat('蘋果')
p2.eat('西瓜')
對(duì)象屬性的增刪改查
1.對(duì)象屬性
'''
python中對(duì)象屬性支持增刪改查操作
'''
class Person:
def __init__(self, name, age=0, gender='男'):
self.name = name
self.age = age
self.gender = gender
p1 = Person('小明', 18)
p2 = Person('小花', 20, '女')
2.查 - 獲取對(duì)象屬性的值
'''
1)對(duì)象.屬性 - 獲取對(duì)象指定屬性的值厂置,如果屬性不存在菩掏,報(bào)錯(cuò)
2)getattr(對(duì)象,屬性名) - 獲取對(duì)象指定屬性的值昵济,如果屬性不存在智绸,報(bào)錯(cuò)
getattr(對(duì)象,屬性名, 默認(rèn)值) -- 獲取對(duì)象指定屬性的值访忿,如果屬性不存在瞧栗,不會(huì)報(bào)錯(cuò)而是返回默認(rèn)值
'''
print(p1.name)
print(getattr(p1, 'name'))
print(getattr(p1, 'idcard', '001'))
value = 'name'
print(getattr(p1, value))
3.增、改
'''
1)對(duì)象.屬性 = 值 - 當(dāng)屬性不存在就給對(duì)象添加屬性海铆;
如果屬性存在就給對(duì)象修改屬性
2)setattr(對(duì)象迹恐,屬性名,值) -
'''
p1.name = 'xiaoming'
print(p1.name)
p1.id_card = '111'
print(p1.id_card)
setattr(p1, 'age', 30)
print(p1.age)
setattr(p1, 'height', 190)
print(p1.height)
4.刪 - 刪除對(duì)象屬性
'''
1)del 對(duì)象.屬性
2)delattr(對(duì)象卧斟,屬性名)
'''
del p1.gender
delattr(p1, 'name')
# 注意:屬性的增刪改查只針對(duì)當(dāng)前對(duì)象有效殴边,不會(huì)作用于其他對(duì)象
class Dog:
# # 可以通過給類的__slots__字段賦值,來約束當(dāng)前類的對(duì)象最多有哪些屬性
__slots__ = ('name', 'age')
def __init__(self, name, age):
self.name = name
self.age = age
dog1 = Dog('小黑', 15)
print(dog1.name, dog1.age)
內(nèi)置類屬性
1.什么是內(nèi)置類屬性
'''
創(chuàng)建類的時(shí)候珍语,系統(tǒng)自動(dòng)為這個(gè)類提供的屬性
'''
class Preson:
"""人類"""
num = 61
def __init__(self, name, age=0, gender='女'):
self.name = name
self.age = age
self.gender = gender
def eat(self, food):
print('%s在吃%s' % (self.name, food))
# def __repr__(self):
# return '<%s>' % str(self.__dict__)[1:-1]
p1 = Preson('Tom', 18, '男')
1.name:
'''
類的字段锤岸,獲取類的名字
'''
print(Preson.name)
2.doc
'''
類的字段,獲取類的說明文檔
'''
print(Preson.doc)
3.class
'''
對(duì)象屬性板乙,獲取對(duì)象對(duì)應(yīng)的類
'''
c1 = p1.class
print(c1)
4.dict
'''
1)類的字段是偷,獲取類中的字段(用得少)
2)對(duì)象屬性,獲取對(duì)象的所有屬性和其對(duì)應(yīng)的值,以字典形式返回
注意:如果給類的slots屬性賦了值,那么這個(gè)類的對(duì)象就不能使用dict去獲取所有屬性
'''
print(Preson.dict)
print(p1.dict)
5.module
'''
類的字段蛋铆,獲取類所在的模塊(類是在哪個(gè)py文件中聲明的,返回的是模塊名)
'''
print(Preson.module)
print(int.module)
6.bases
'''
類的字段饿幅,獲取當(dāng)前類的父類
'''
print(Preson.bases)