1 類:具有相同屬性和方法的對象的集合朦前;
對象:萬物皆對象介杆;
2..class 類名:
屬性
方法
3.class Preson:
def eat(self):
print("正在吃飯");
def sleep(self):
print("正在睡覺")
4.類的命名
首字母大寫
以大小寫分割單詞
不使用下劃線“_”
5.創(chuàng)建對象
屬性寫在類外的情況韭寸,就是通過對象.屬性春哨,對象.方法()的方法調(diào)用
對象的三要素:屬性(對象是什么)、方法(對象能做什么)恩伺、事件(對象如何響應(yīng))
相互關(guān)系:類是對象的抽象赴背,對象是類的實例,類是一種抽象事物的分類,對象是一種實例凰荚;
6.屬性相對于類來說屬于全局燃观,每個方法都可以調(diào)用;
4.屬性分歸屬 類屬性 對象屬性
對象屬性的兩種創(chuàng)建方式:
self 對象的載體
def int(self,name,age):
self.name=name;
self,age=age;
創(chuàng)建對象屬性
- 對象名.屬性 賦值的形式
- init(self,name,age) 在創(chuàng)建類的實例的時候便瑟,回自動調(diào)用這個方法缆毁,一般用戶對實例屬性初始化;
class Person:
def init(self,name,age):
self.name=name;
self.age=age;
print("執(zhí)行init時就被調(diào)用了")
p=Person("tom",22)
print(p.name)
print(p.age)
執(zhí)行init時就被調(diào)用了
tom
22
-
new(cls,agrs,*kwargs)
在類調(diào)用init方法時到涂,new方法決定是否要用init方法脊框,因為new可以調(diào)用其他類的方法,或者返回別的對象來
作為本類的實例践啄;
new()方法的特性:
new()方法時在類準(zhǔn)備將自身實例化時調(diào)用缚陷;
new()方法始終都是類的靜態(tài)方法,即使沒有被加上靜態(tài)方法裝飾器往核;
class A(object):
def init(self,args,kwargs):
print( "init &&&& %s" % self.class)
def new(cls,args,kwargs):
print( "new &&&& %s" % cls)
return object.new(cls,args,*kwargs)
a=A()
new &&&& <class 'main.A'>
init &&&& <class 'main.A'>
8.對象屬性 私有和共有
類屬性 公有和私有
對屬性進(jìn)行私有化 __屬性,外部訪問不到嚷节,也不可對屬性進(jìn)行賦值
class Person(object):
def init(self, name):
self.name = name
self._title = 'Mr'
self.__job = 'Student'
p = Person('Bob')
print (p.name)
Bob
print (p._title)
Mr
print (p.__job)
- 封裝 2步
(1)把屬性變成私有
(2)用set()和get()函數(shù)寫一個方法
class Person:
def init(self,name,age):
self.name=name
self.__age=age
def getAge(self):
return self.__age
def setAge(self, age):
if age<0 or age>100:
self.__age=18;
else:
self.__age=age
def showtime(self):
print("姓名:{}".format())
p=Person("as",20);
print(p.getAge())
p.setAge(10)
print(p.getAge())
20
10
11.def str() 一個類的實例變成str,需要用特殊方法str()
class Person(object):
def init(self, name, gender):
self.name = name
self.gender = gender
p = Person('Bob', 'male')
print (p)
<main.Person object at 0x02171270>
class Person(object):
def init(self, name, gender):
self.name = name
self.gender = gender
def str(self):
return '(Person: %s, %s)' % (self.name, self.gender)
p = Person('Bob', 'male')
print (p)
(Person: Bob, male)
12.公有方法和私有方法聂儒;
私有方法在方法前加兩個下劃線:def __text():
- 自動銷毀方法:del(): 當(dāng)對象沒有引用的時候,或程序結(jié)束的時候硫痰,程序自動調(diào)用del()
class Person:
def init(self,name,age):
self.name=name
self.age=age
def del(self):
print("對象張三被銷毀")
zhangsan=Person("張三",20)
zhangsan.del()
對象張三被銷毀
對象張三被銷毀
14.測試對象有多少次引用
import sys
t=T()
sys.getrefcount(t)返回2 從2開始
import sys
class Person:
def init(self,name,age):
self.name=name;
self.age=age;
zhangsan=Person("張三",20)
print(sys.getrefcount(zhangsan))
2
15.訪問私有屬性可以通過 對象.類名_屬性訪問到(不建議用這個方法)
16.id()函數(shù) 查看對象的內(nèi)存地址衩婚;
17.類屬性:屬于類成員,對象共有的效斑;
類方法:cls 表明是 類
在方法上添加 @classmethod裝飾器
def class_method(cls):
可以通過類方法調(diào)用類屬性非春,也可以通過對象調(diào)用類屬性;
修改類屬性的2種方式:
1.類名.類屬性=...
2.實例對象__class__類屬性=...
靜態(tài)方法:前面加@staticmethod缓屠,靜態(tài)方法可以加參數(shù)奇昙,與類和對象都沒有關(guān)系,也可以通過類和對象調(diào)用敌完;
class Person:
def init(self,name,age):
self.name=name;
self.age=age;
def showInfo(self):
print("姓名{0} 年齡{1}".format(self.name, self.age))
@staticmethod
def goHome(self,name, by):
print(name, "回家...", by)
- dir() dir 展示一個類/對象的內(nèi)部屬性和函數(shù);
dir(zhangsan);
zhangsan.dir()