python面向对象类_python:面向对象(类)
#!usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "Samson"
###類變量與實例變量
class Role:
n = 123#類變量,存放在類中,不存放在實例中,可用于節省空間
def __init__(self, name, role, weapon, life_value = 100, money = 15000):
#構造函數
#在實例化時做一些類的初始化工作
self.name = name#實例變量(靜態屬性),存放在類中
self.role = role
self.weapon = weapon
self.life_value = life_value
self.__money = money#私有屬性,僅能在類的內部訪問
def shot(self):#類的方法,功能(動態屬性)
print("shooting...")
def got_shot(self):
print("%s:ah...,I have got shot..." %self.name)
def __show_money(self):#類的私有函數,僅能在類的內部訪問
print("money:%s" % self.__money)
def buy_gun(self, gun_name):
print("%s just bought %s" % (self.name, gun_name))
def __del__(self):#析構函數、在實例釋放、銷毀的時候執行的,通常用于做一些收尾工作,如關閉一些數據庫,關閉打開的一些文件
print("執行析構函數")
print(Role)
r1 = Role("samson", "police", "AK47")#把一個類變成一個具體對象的過程叫實例化
r1.got_shot()#Role.got_shot(r1)
r1.bullet_prove = True #給類添加屬性,這是可以的
r2 = Role("r2", "police", "AK47")#把一個類變成一個具體對象的過程叫實例化
r2.got_shot()#Role.got_shot(r1)
print(r1.weapon)
del r1.weapon#刪除屬性
r1.n = 145#相當于r1中新增了一個實例變量,不影響類變量
print(r1.n, r2.n)#r2中的n值不變
#!usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "Samson"
#繼承
#class People:#經典類
class People(object):#新式類
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating..." % self.name)
def talk(self):
print("%s is talking..." % self.name)
def sleep(self):
print("%s is sleeping..." % self.name)
class Relation(object):
def make_friends(self,obj):
print("%s is making friends with %s" %(self.name,obj.name))
class Man(People,Relation):#多繼承
def __init__(self,name,age,money):
People.__init__(self, name, age)#經典類寫法,與super(Man,self).__init__(name,age) 新式類寫法一樣
self.money = money
print("%s has %s dollars" %(self.name,self.money))
def shopping(self):
print("%s is shopping..." % self.name)
def sleep(self):#重構父類方法
People.sleep(self)
print("man is sleeping...")
m1 = Man("samson",23,10)
m1.eat()
m1.shopping()
m1.sleep()
m2 = Man("sun",24,20)
m1.make_friends(m2)
注意,關于經典類與新式類的繼承順序:python2中經典類是按深度優先繼承(D的繼承順序為先B后A,再C),新式類中為廣度優先(D的繼承順序為先B后C,再A);python3中經典類與新式類都是按廣度優先來繼承的
#!usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "Samson"
#封裝可以隱藏實現細節,使得代碼模塊化;繼承可以拓展已存在的代碼塊(類);它們的目的都是為了--代碼重用。而多態則是為了實現另一個目的--接口重用!多態的作用,就是為了類在繼承和派生的時候,保證使用"家譜"中任一類的實例的某一屬性時的正確調用,簡單點就是一種接口,多種實現
#Python不支持多態,但可以間接實現
#通過python模擬的多態
class Animal:
def __init__(self,name):
self.name = name
def talk(self):
raise NotImplementedError("Subclass must implement abstract method")#拋出異常
@staticmethod
def animal_talk(obj):
obj.talk()
class Cat(Animal):
def talk(self):
print("Meow!")
class Dog(Animal):
def talk(self):
print("Woof! Woof!")
d = Dog("wangcai")
c = Cat("xiaohei")
Animal.animal_talk(d)
Animal.animal_talk(c)
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python面向对象类_python:面向对象(类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剪映时间轴怎么放大? 剪映电脑版放大时间
- 下一篇: python热力图背景_python 绘