<h1 id="面向对象" data-source-line="1">面向对象
<h3 id="面向对象三大特点" data-source-line="3">面向对象三大特点
<ul data-source-line="5">
相关概念
-
继承语法
父类时,默认继承object
=</span><span style="color: #0000ff">def</span><span style="color: #000000"> eat(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">小动物喜欢一天到晚出个不停</span><span style="color: #800000">'</span><span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 继承自Animal
<span style="color: #0000ff">class<span style="color: #000000"> Dog(Animal):
<span style="color: #0000ff">pass<span style="color: #000000">
d
= Dog(<span style="color: #800000">'<span style="color: #800000">旺财<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 可以拥有父类的方法
<span style="color: #000000">d.eat()
<span style="color: #008000">#<span style="color: #008000"> 也可以拥有父类的属性
<span style="color: #0000ff">print(d.name)
-
派生示例
(<span style="color: #0000ff">class<span style="color: #000000"> Cat(Animal):
<span style="color: #0000ff">def<span style="color: #000000"> eat(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">猫喜欢吃老鼠<span style="color: #800000">'<span style="color: #000000">)
tom =<span style="color: #000000"> Cat()
tom.run()
<span style="color: #008000">#<span style="color: #008000"> 多出来的行为
<span style="color: #000000">tom.eat()
<span style="color: #008000">#<span style="color: #008000"> 多出来的属性
tom.color = <span style="color: #800000">'<span style="color: #800000">蓝色<span style="color: #800000">'
<span style="color: #0000ff">print(tom.color)
-
重写方法
(</span><span style="color: #0000ff">def</span><span style="color: #000000"> run(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">小动物一天到晚的四处连跑</span><span style="color: #800000">'</span><span style="color: #000000">)
<span style="color: #0000ff">class<span style="color: #000000"> Cat(Animal):
<span style="color: #008000">#<span style="color: #008000"> 父类的方法完全不合适,覆盖重写
<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">俺走的是猫步<span style="color: #800000">'<span style="color: #000000">)
</span><span style="color: #008000">#</span><span style="color: #008000"> <a href="/tag/fulei/" target="_blank" class="keywords">父类</a>的<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>部分合适,需要<a href="/tag/tianjia/" target="_blank" class="keywords">添加</a><a href="/tag/neirong/" target="_blank" class="keywords">内容</a>进行完善</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> eat(self):
</span><span style="color: #008000">#</span><span style="color: #008000"> 保留<a href="/tag/fulei/" target="_blank" class="keywords">父类</a>的<a href="/tag/neirong/" target="_blank" class="keywords">内容</a>,不建议使用此方式</span>
<span style="color: #008000">#</span><span style="color: #008000"> Animal.eat(self)</span>
<span style="color: #008000">#</span><span style="color: #008000"> super(Cat,self).eat()</span>
<span style="color: #008000">#</span><span style="color: #008000"> 类名及self可以不传</span>
<span style="color: #000000"> super().eat()
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">不过俺喜欢吃鱼<span style="color: #800000">'<span style="color: #000000">)
jiafei =<span style="color: #000000"> Cat()
jiafei.run()
jiafei.eat()
-
多继承:一个子类可以拥有多个父类
(<span style="color: #0000ff">class<span style="color: #000000"> B:
<span style="color: #0000ff">def<span style="color: #000000"> eat(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">eat func in class B<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">class<span style="color: #000000"> C(A,B):
<span style="color: #0000ff">def<span style="color: #000000"> eat(self):
<span style="color: #008000">#<span style="color: #008000"> 这种方案是默认的继承顺序进行选择的父类方法
<span style="color: #008000">#<span style="color: #008000"> super().eat()
<span style="color: #008000">#<span style="color: #008000"> 人为指定调用某个父类的方法
<span style="color: #000000"> B.eat(self)
c =<span style="color: #000000"> C()
c.eat()
权限
-
示例:
= = 20
<span style="color: #0000ff">def</span><span style="color: #000000"> eat(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">民以食为天</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__test</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__test</span><span style="color: #800000">'</span><span style="color: #000000">)
xiaoming
= Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming.name)
xiaoming.eat()
<span style="color: #008000">#<span style="color: #008000"> 不能在类外使用
<span style="color: #0000ff">print(xiaoming.<span style="color: #800080">__age<span style="color: #000000">)
xiaoming._Persontest()
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming.dict)
<span style="color: #008000">#<span style="color: #008000"> 尽管可以这样访问私有属性,但是强烈建议不要这样使用
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming._Personage)
<span style="color: #0000ff">class<span style="color: #000000"> Man(Person):
<span style="color: #0000ff">def<span style="color: #000000"> introduce(self):
<span style="color: #008000">#<span style="color: #008000"> 不能在子类中使用
<span style="color: #008000">#<span style="color: #008000"> print(self.__age)
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">我叫{}<span style="color: #800000">'<span style="color: #000000">.format(self.name))
self.eat()
m = Man(<span style="color: #800000">'<span style="color: #800000">诸葛<span style="color: #800000">'<span style="color: #000000">)
m.introduce()
属性" data-source-line="162">类属性
说明:定义类时,写在方法外的属性,通常会写在类的开头,这样的属性称为类属性
-
示例:
属性,通过类名访问,属于整个类,而不是某个对象
<span style="color: #008000">#</span><span style="color: #008000"> 限制可以使用的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>,提高访问的效率</span>
<span style="color: #008000">#</span><span style="color: #008000"> 也可以提高访问速度,减少内存使用</span>
<span style="color: #800080">__slots__</span> = (<span style="color: #800000">'</span><span style="color: #800000">name</span><span style="color: #800000">'</span>,<span style="color: #800000">'</span><span style="color: #800000">age</span><span style="color: #800000">'</span>,<span style="color: #800000">'</span><span style="color: #800000">nation</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__init__</span><span style="color: #000000">(self,name):
self.name </span>=<span style="color: #000000"> name
self.nation </span>= <span style="color: #800000">'</span><span style="color: #800000">china</span><span style="color: #800000">'</span><span style="color: #000000">
p1
= Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
p2 = Person(<span style="color: #800000">'<span style="color: #800000">小红<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print<span style="color: #000000">(p1.name,p2.name)
<span style="color: #0000ff">print<span style="color: #000000">(Person.nation)
<span style="color: #008000">#<span style="color: #008000"> p1.nation = 'china'
<span style="color: #0000ff">print<span style="color: #000000">(p1.nation)
<span style="color: #0000ff">print<span style="color: #000000">(p2.nation)
<span style="color: #008000">#<span style="color: #008000"> print(Person.nation)
<span style="color: #000000">
p1.age = 20
<span style="color: #008000">#<span style="color: #008000"> p1.height = 180
<span style="color: #008000">#<span style="color: #008000"> 特殊的类属性<span style="color: #008000">
<span style="color: #008000"> 表示类名的字符串
<span style="color: #0000ff">print(Person.<span style="color: #800080">name<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 表示父类构成的元组
<span style="color: #0000ff">print(Person.<span style="color: #800080">bases<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 存储类的相关信息
<span style="color: #0000ff">print(Person.<span style="color: #800080">dict<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 限制可以使用的属性
<span style="color: #0000ff">print(Person.<span style="color: #800080">slots)
方法" data-source-line="208">类方法
说明:
-
作用:
- 可以创建对象或者简洁的创建对象
- 对外提供简单易用的接口
-
示例1:创建对象
( @classmethod
</span><span style="color: #0000ff">def</span><span style="color: #000000"> test(cls):
</span><span style="color: #0000ff">print</span><span style="color: #000000">(cls)
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">类<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #008000">#</span><span style="color: #008000"> 创建对象,或者简洁的创建对象</span>
<span style="color: #000000"> @classmethod
<span style="color: #0000ff">def<span style="color: #000000"> create(cls):
p =<span style="color: #000000"> cls()
p.age = 1
<span style="color: #0000ff">return<span style="color: #000000"> p
p1
=<span style="color: #000000"> Person()
p1.eat()
<span style="color: #008000">#<span style="color: #008000"> 通过类名调用
<span style="color: #000000"> Person.test()
<span style="color: #008000">#<span style="color: #008000"> 创建或简洁的创建对象
p2 =<span style="color: #000000"> Person.create()
<span style="color: #0000ff">print(type(p2))
示例2:提供接口
==</span><span style="color: #0000ff">def</span><span style="color: #000000"> add(self):
</span><span style="color: #0000ff">return</span> self.num1 +<span style="color: #000000"> self.num2
</span><span style="color: #0000ff">def</span><span style="color: #000000"> sub(self):
</span><span style="color: #0000ff">return</span> self.num1 -<span style="color: #000000"> self.num2
</span><span style="color: #0000ff">def</span><span style="color: #000000"> mul(self):
</span><span style="color: #0000ff">return</span> self.num1 *<span style="color: #000000"> self.num2
</span><span style="color: #0000ff">def</span><span style="color: #000000"> div(self):
</span><span style="color: #0000ff">if</span> self.num2 ==<span style="color: #000000"> 0:
</span><span style="color: #0000ff">return</span><span style="color: #000000"> None
</span><span style="color: #0000ff">return</span> self.num1 /<span style="color: #000000"> self.num2
</span><span style="color: #008000">#</span><span style="color: #008000"> 对外提供简单易用的接口</span>
<span style="color: #000000"> @classmethod
<span style="color: #0000ff">def<span style="color: #000000"> pingfanghe(cls,num2):
n1 =<span style="color: #000000"> cls(num1,num1)
n12 =<span style="color: #000000"> n1.mul()
n2 </span>=<span style="color: #000000"> cls(num2,num2)
n22 </span>=<span style="color: #000000"> n2.mul()
n3 </span>=<span style="color: #000000"> cls(n12,n22)
</span><span style="color: #0000ff">return</span><span style="color: #000000"> n3.add()
he
= Number.pingfanghe(3,4<span style="color: #000000">)
<span style="color: #0000ff">print(he)
方法" data-source-line="289">静态方法
说明:
-
示例:
(</span><span style="color: #008000">#</span><span style="color: #008000"> 创建对象</span>
<span style="color: #000000"> @staticmethod
<span style="color: #0000ff">def<span style="color: #000000"> create():
p =<span style="color: #000000"> Person()
<span style="color: #0000ff">return<span style="color: #000000"> p
Person.test()
p
=<span style="color: #000000"> Person.create()
<span style="color: #0000ff">print(p)
-
示例:
<span style="color: #0000ff">class
<span style="color: #000000"> Dog(Animal):
<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">狗通常走S型<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">class<span style="color: #000000"> Cat(Animal):
<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">猫平时走猫步,偶尔突然加速<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">def<span style="color: #000000"> test(obj):
obj.run()
d =<span style="color: #000000"> Dog()
c =<span style="color: #000000"> Cat()
test(d)
test(c)
属性函数" data-source-line="350">属性函数
-
-
示例:
= = </span><span style="color: #008000">#</span><span style="color: #008000"> 该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>可以像成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>一样访问</span>
<span style="color: #000000"> @property
<span style="color: #0000ff">def<span style="color: #000000"> password(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">有人想查看密码<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">return <span style="color: #800000">'<span style="color: #800000">想偷看密码,没门<span style="color: #800000">'
<span style="color: #008000">#<span style="color: #008000"> return self.__password
<span style="color: #008000">#</span><span style="color: #008000"> 在设置密码时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a><a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a></span>
<span style="color: #000000"> @password.setter
<span style="color: #0000ff">def<span style="color: #000000"> password(self,password):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">@password.setter<span style="color: #800000">'<span style="color: #000000">,password)
self.<span style="color: #800080">__password = <span style="color: #800000">'<span style="color: #800000">加密<span style="color: #800000">' + password + <span style="color: #800000">'<span style="color: #800000">加密<span style="color: #800000">'<span style="color: #000000">
u = User(<span style="color: #800000">'<span style="color: #800000">xiaoming<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">111111<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> print(u.password())
<span style="color: #0000ff">print<span style="color: #000000">(u.password)
<span style="color: #008000">#<span style="color: #008000"> 设置密码,会自动调用setter方法
u.password = <span style="color: #800000">'<span style="color: #800000">abcde<span style="color: #800000">'
相关概念
继承语法
</span><span style="color: #0000ff">def</span><span style="color: #000000"> eat(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">小动物喜欢一天到晚出个不停</span><span style="color: #800000">'</span><span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 继承自Animal<span style="color: #0000ff">class<span style="color: #000000"> Dog(Animal):
<span style="color: #0000ff">pass<span style="color: #000000">
d
= Dog(<span style="color: #800000">'<span style="color: #800000">旺财<span style="color: #800000">'<span style="color: #000000">)<span style="color: #008000">#<span style="color: #008000"> 可以拥有父类的方法
<span style="color: #000000">d.eat()
<span style="color: #008000">#<span style="color: #008000"> 也可以拥有父类的属性
<span style="color: #0000ff">print(d.name)
派生示例
<span style="color: #0000ff">def<span style="color: #000000"> eat(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">猫喜欢吃老鼠<span style="color: #800000">'<span style="color: #000000">)
tom =<span style="color: #000000"> Cat()
tom.run()
<span style="color: #008000">#<span style="color: #008000"> 多出来的行为
<span style="color: #000000">tom.eat()
<span style="color: #008000">#<span style="color: #008000"> 多出来的属性
tom.color = <span style="color: #800000">'<span style="color: #800000">蓝色<span style="color: #800000">'
<span style="color: #0000ff">print(tom.color)
重写方法
</span><span style="color: #0000ff">def</span><span style="color: #000000"> run(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">小动物一天到晚的四处连跑</span><span style="color: #800000">'</span><span style="color: #000000">)
<span style="color: #0000ff">class<span style="color: #000000"> Cat(Animal):<span style="color: #008000">#<span style="color: #008000"> 父类的方法完全不合适,覆盖重写
<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">俺走的是猫步<span style="color: #800000">'<span style="color: #000000">)
</span><span style="color: #008000">#</span><span style="color: #008000"> <a href="/tag/fulei/" target="_blank" class="keywords">父类</a>的<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>部分合适,需要<a href="/tag/tianjia/" target="_blank" class="keywords">添加</a><a href="/tag/neirong/" target="_blank" class="keywords">内容</a>进行完善</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> eat(self):
</span><span style="color: #008000">#</span><span style="color: #008000"> 保留<a href="/tag/fulei/" target="_blank" class="keywords">父类</a>的<a href="/tag/neirong/" target="_blank" class="keywords">内容</a>,不建议使用此方式</span>
<span style="color: #008000">#</span><span style="color: #008000"> Animal.eat(self)</span>
<span style="color: #008000">#</span><span style="color: #008000"> super(Cat,self).eat()</span>
<span style="color: #008000">#</span><span style="color: #008000"> 类名及self可以不传</span>
<span style="color: #000000"> super().eat()
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">不过俺喜欢吃鱼<span style="color: #800000">'<span style="color: #000000">)
jiafei =<span style="color: #000000"> Cat()
jiafei.run()
jiafei.eat()
多继承:一个子类可以拥有多个父类
<span style="color: #0000ff">def<span style="color: #000000"> eat(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">eat func in class B<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">class<span style="color: #000000"> C(A,B):
<span style="color: #0000ff">def<span style="color: #000000"> eat(self):
<span style="color: #008000">#<span style="color: #008000"> 这种方案是默认的继承顺序进行选择的父类方法
<span style="color: #008000">#<span style="color: #008000"> super().eat()
<span style="color: #008000">#<span style="color: #008000"> 人为指定调用某个父类的方法
<span style="color: #000000"> B.eat(self)
c =<span style="color: #000000"> C()
c.eat()
-
示例:
= = 20<span style="color: #0000ff">def</span><span style="color: #000000"> eat(self): </span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">民以食为天</span><span style="color: #800000">'</span><span style="color: #000000">) </span><span style="color: #0000ff">def</span> <span style="color: #800080">__test</span><span style="color: #000000">(self): </span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__test</span><span style="color: #800000">'</span><span style="color: #000000">)
xiaoming
= Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming.name)
xiaoming.eat()
<span style="color: #008000">#<span style="color: #008000"> 不能在类外使用
<span style="color: #0000ff">print(xiaoming.<span style="color: #800080">__age<span style="color: #000000">)
xiaoming._Persontest()
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming.dict)
<span style="color: #008000">#<span style="color: #008000"> 尽管可以这样访问私有属性,但是强烈建议不要这样使用
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming._Personage)<span style="color: #0000ff">class<span style="color: #000000"> Man(Person):
<span style="color: #0000ff">def<span style="color: #000000"> introduce(self):
<span style="color: #008000">#<span style="color: #008000"> 不能在子类中使用
<span style="color: #008000">#<span style="color: #008000"> print(self.__age)
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">我叫{}<span style="color: #800000">'<span style="color: #000000">.format(self.name))
self.eat()m = Man(<span style="color: #800000">'<span style="color: #800000">诸葛<span style="color: #800000">'<span style="color: #000000">)
m.introduce()
权限
属性" data-source-line="162">类属性
-
示例:
属性,通过类名访问,属于整个类,而不是某个对象<span style="color: #008000">#</span><span style="color: #008000"> 限制可以使用的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>,提高访问的效率</span> <span style="color: #008000">#</span><span style="color: #008000"> 也可以提高访问速度,减少内存使用</span> <span style="color: #800080">__slots__</span> = (<span style="color: #800000">'</span><span style="color: #800000">name</span><span style="color: #800000">'</span>,<span style="color: #800000">'</span><span style="color: #800000">age</span><span style="color: #800000">'</span>,<span style="color: #800000">'</span><span style="color: #800000">nation</span><span style="color: #800000">'</span><span style="color: #000000">) </span><span style="color: #0000ff">def</span> <span style="color: #800080">__init__</span><span style="color: #000000">(self,name): self.name </span>=<span style="color: #000000"> name self.nation </span>= <span style="color: #800000">'</span><span style="color: #800000">china</span><span style="color: #800000">'</span><span style="color: #000000">
p1
= Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
p2 = Person(<span style="color: #800000">'<span style="color: #800000">小红<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print<span style="color: #000000">(p1.name,p2.name)
<span style="color: #0000ff">print<span style="color: #000000">(Person.nation)
<span style="color: #008000">#<span style="color: #008000"> p1.nation = 'china'
<span style="color: #0000ff">print<span style="color: #000000">(p1.nation)
<span style="color: #0000ff">print<span style="color: #000000">(p2.nation)
<span style="color: #008000">#<span style="color: #008000"> print(Person.nation)
<span style="color: #000000">
p1.age = 20
<span style="color: #008000">#<span style="color: #008000"> p1.height = 180<span style="color: #008000">#<span style="color: #008000"> 特殊的类属性<span style="color: #008000">
<span style="color: #008000"> 表示类名的字符串
<span style="color: #0000ff">print(Person.<span style="color: #800080">name<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 表示父类构成的元组
<span style="color: #0000ff">print(Person.<span style="color: #800080">bases<span style="color: #000000">)<span style="color: #008000">#<span style="color: #008000"> 存储类的相关信息
<span style="color: #0000ff">print(Person.<span style="color: #800080">dict<span style="color: #000000">)<span style="color: #008000">#<span style="color: #008000"> 限制可以使用的属性
<span style="color: #0000ff">print(Person.<span style="color: #800080">slots)
说明:定义类时,写在方法外的属性,通常会写在类的开头,这样的属性称为类属性
方法" data-source-line="208">类方法
-
作用:
- 可以创建对象或者简洁的创建对象
- 对外提供简单易用的接口
-
示例1:创建对象
(@classmethod </span><span style="color: #0000ff">def</span><span style="color: #000000"> test(cls): </span><span style="color: #0000ff">print</span><span style="color: #000000">(cls) </span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">类<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span><span style="color: #800000">'</span><span style="color: #000000">) </span><span style="color: #008000">#</span><span style="color: #008000"> 创建对象,或者简洁的创建对象</span>
<span style="color: #000000"> @classmethod
<span style="color: #0000ff">def<span style="color: #000000"> create(cls):
p =<span style="color: #000000"> cls()
p.age = 1
<span style="color: #0000ff">return<span style="color: #000000"> pp1
=<span style="color: #000000"> Person()
p1.eat() <span style="color: #008000">#<span style="color: #008000"> 通过类名调用
<span style="color: #000000"> Person.test()
<span style="color: #008000">#<span style="color: #008000"> 创建或简洁的创建对象
p2 =<span style="color: #000000"> Person.create()
<span style="color: #0000ff">print(type(p2))
说明:
示例2:提供接口
</span><span style="color: #0000ff">def</span><span style="color: #000000"> add(self):
</span><span style="color: #0000ff">return</span> self.num1 +<span style="color: #000000"> self.num2
</span><span style="color: #0000ff">def</span><span style="color: #000000"> sub(self):
</span><span style="color: #0000ff">return</span> self.num1 -<span style="color: #000000"> self.num2
</span><span style="color: #0000ff">def</span><span style="color: #000000"> mul(self):
</span><span style="color: #0000ff">return</span> self.num1 *<span style="color: #000000"> self.num2
</span><span style="color: #0000ff">def</span><span style="color: #000000"> div(self):
</span><span style="color: #0000ff">if</span> self.num2 ==<span style="color: #000000"> 0:
</span><span style="color: #0000ff">return</span><span style="color: #000000"> None
</span><span style="color: #0000ff">return</span> self.num1 /<span style="color: #000000"> self.num2
</span><span style="color: #008000">#</span><span style="color: #008000"> 对外提供简单易用的接口</span>
<span style="color: #000000"> @classmethod
n1 =<span style="color: #000000"> cls(num1,num1)
n12 =<span style="color: #000000"> n1.mul()
n2 </span>=<span style="color: #000000"> cls(num2,num2)
n22 </span>=<span style="color: #000000"> n2.mul()
n3 </span>=<span style="color: #000000"> cls(n12,n22)
</span><span style="color: #0000ff">return</span><span style="color: #000000"> n3.add()
he
= Number.pingfanghe(3,4<span style="color: #000000">)<span style="color: #0000ff">print(he)
方法" data-source-line="289">静态方法
-
示例:
(</span><span style="color: #008000">#</span><span style="color: #008000"> 创建对象</span>
<span style="color: #000000"> @staticmethod
<span style="color: #0000ff">def<span style="color: #000000"> create():
p =<span style="color: #000000"> Person()
<span style="color: #0000ff">return<span style="color: #000000"> pPerson.test()
=<span style="color: #000000"> Person.create()
p
<span style="color: #0000ff">print(p)
说明:
-
示例:
<span style="color: #0000ff">class
<span style="color: #000000"> Dog(Animal):
<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">狗通常走S型<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">class<span style="color: #000000"> Cat(Animal):
<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">猫平时走猫步,偶尔突然加速<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">def<span style="color: #000000"> test(obj):
obj.run()
d =<span style="color: #000000"> Dog()
c =<span style="color: #000000"> Cat()
test(d)
test(c)
属性函数" data-source-line="350">属性函数
-
-
示例:
= = </span><span style="color: #008000">#</span><span style="color: #008000"> 该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>可以像成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>一样访问</span>
<span style="color: #000000"> @property
<span style="color: #0000ff">def<span style="color: #000000"> password(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">有人想查看密码<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">return <span style="color: #800000">'<span style="color: #800000">想偷看密码,没门<span style="color: #800000">'
<span style="color: #008000">#<span style="color: #008000"> return self.__password
<span style="color: #008000">#</span><span style="color: #008000"> 在设置密码时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a><a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a></span>
<span style="color: #000000"> @password.setter
<span style="color: #0000ff">def<span style="color: #000000"> password(self,password):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">@password.setter<span style="color: #800000">'<span style="color: #000000">,password)
self.<span style="color: #800080">__password = <span style="color: #800000">'<span style="color: #800000">加密<span style="color: #800000">' + password + <span style="color: #800000">'<span style="color: #800000">加密<span style="color: #800000">'<span style="color: #000000">
u = User(<span style="color: #800000">'<span style="color: #800000">xiaoming<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">111111<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> print(u.password())
<span style="color: #0000ff">print<span style="color: #000000">(u.password)
<span style="color: #008000">#<span style="color: #008000"> 设置密码,会自动调用setter方法
u.password = <span style="color: #800000">'<span style="color: #800000">abcde<span style="color: #800000">'
示例:
<span style="color: #0000ff">class
<span style="color: #000000"> Dog(Animal):<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">狗通常走S型<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">class<span style="color: #000000"> Cat(Animal):
<span style="color: #0000ff">def<span style="color: #000000"> run(self):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">猫平时走猫步,偶尔突然加速<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">def<span style="color: #000000"> test(obj):
obj.run()
d =<span style="color: #000000"> Dog()
c =<span style="color: #000000"> Cat()
test(d)
test(c)
示例:
</span><span style="color: #008000">#</span><span style="color: #008000"> 该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>可以像成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>一样访问</span>
<span style="color: #000000"> @property
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">有人想查看密码<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">return <span style="color: #800000">'<span style="color: #800000">想偷看密码,没门<span style="color: #800000">'
<span style="color: #008000">#<span style="color: #008000"> return self.__password
<span style="color: #008000">#</span><span style="color: #008000"> 在设置密码时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a><a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a></span>
<span style="color: #000000"> @password.setter
<span style="color: #0000ff">def<span style="color: #000000"> password(self,password):
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">@password.setter<span style="color: #800000">'<span style="color: #000000">,password)
self.<span style="color: #800080">__password = <span style="color: #800000">'<span style="color: #800000">加密<span style="color: #800000">' + password + <span style="color: #800000">'<span style="color: #800000">加密<span style="color: #800000">'<span style="color: #000000">
u = User(<span style="color: #800000">'<span style="color: #800000">xiaoming<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">111111<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> print(u.password())
<span style="color: #0000ff">print<span style="color: #000000">(u.password)
<span style="color: #008000">#<span style="color: #008000"> 设置密码,会自动调用setter方法
u.password = <span style="color: #800000">'<span style="color: #800000">abcde<span style="color: #800000">'