class Person:
name = "張三"
age = 3 # 定義在這裏的屬性叫類屬性,所有這個類的範例物件都會共有這個屬性相當於java中的靜態變數
def sayHello(self):
print("hello")
person = Person()
print(person.name)
print(person.age)
person.sayHello()
p2 = Person()
print(p2.name)
print(p2.age)
class Person:
name = "張三"
age = 3
def sayHello(self):
print("hello")
# 類屬性可以通過類名.屬性名的方式來存取和修改,範例化物件要想對類屬性進行修改要通過
# 範例物件想要修改類屬性必須通過 person.__class__.name 的方式進行存取
Person.name = "諸葛亮"
person = Person()
person.__class__.name = "張飛"
print(Person.name)
class Person:
def __init__(self, name, age): # __init__方法是一個魔術方法,當呼叫改造方法時會自動呼叫該方法
self.name = name # 通過self.定義的屬性都是範例屬性,self指範例物件本身相當於java中的this關鍵字
self.age = age
person1 = Person("張三", 3)
person2 = Person("李四", 5)
person3 = Person("王五", 9)
print(person1.name, person1.age)
print(person2.name, person2.age)
print(person3.name, person3.age)
class Person:
@classmethod # 通過這個裝飾器裝飾的方法都是類方法,相當於Java中的靜態方法,可以通過 類名.方法 的形式呼叫
def sayHello(self):
print("hello")
Person.sayHello()
class Person:
def __init__(self, name, age):
self.__name = name # 通過 self.__變數名定義的屬性是私有屬性,無法直接通過.直接方法,需要定義set和get方法
self.__age = age
def getName(self):
return self.__name
def getAge(self):
return self.__age
def setName(self, name):
self.__name = name
def setAge(self, age):
self.__age = age
person = Person("張三", 3)
print(person.getName())
print(person.getAge())
"""
其實在python中並沒有真正的私有屬性
雖然不能通過.屬性名的方式存取
但是可以通過 obj._類名__屬性名 的形式進行直接存取,所以python中的私有屬性只是一種君子約束,一般我們只用一個下劃線表示不希望被修改即可
"""
person._Person__name = "諸葛亮"
print(person.getName())
class Person:
def __init__(self):
pass
@property # 通過這個裝飾器可以將方法屬性化
def name(self):
return self.__name
@property
def age(self):
return self.__age
@name.setter # 可以設定 setter deleter getter ...
def name(self, name):
print("setName方法被呼叫")
self.__name = name
@age.setter
def age(self, age):
print("setAge方法被呼叫")
self.__age = age
person = Person()
person.name = "張三" # 這樣就可以通過像設定屬性一樣呼叫方法了
person.age = 3
print(person.name)
print(person.age)
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def func1(self):
print("我是Person")
class Student(Person):
def __init__(self, name, age, num):
Person.__init__(self, name, age) # 呼叫父類別構造器
self._num = num # 子類自己的屬性
def study(self): # 子類自己的方法
print("好好學習天天向上")
student = Student("張三", 3, 123456)
print(student._name, student._age, student._num)
student.func1()
student.study()
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def func1(self):
print("我是Person")
class Son(Person):
def __init__(self, name, age, gender):
Person.__init__(self, name, age)
self._gender = gender
def son(self):
print("在老子面前永遠是兒子")
class Student(Person):
def __init__(self, name, age, num):
Person.__init__(self, name, age) # 呼叫父類別構造器
self._num = num # 子類自己的屬性
def study(self): # 子類自己的方法
print("好好學習天天向上")
class Me(Son, Student):
# 如果不寫__init__方法就會預設基礎第一個繼承類的構造
def __init__(self, name, age, gender, num, gift):
Son.__init__(self, name, age, gender)
Student.__init__(self, name, age, num)
self._gift = gift
def me(self):
print("我就是我顏色不一樣的煙火")
me = Me("孫悟空", 756, "男", 123, "七十二變")
print(isinstance(me, Person)) # isinstance(a,b) 判斷a是不是b的範例
print(isinstance(me, Student))
print(isinstance(me, Son))
print(me._name)
print(me._age)
print(me._gender)
print(me._gift)
me.func1()
me.study()
me.son()
me.me()
\#!/usr/bin/python3
class Parent: # 定義父類別
def myMethod(self):
print ('呼叫父類別方法')
class Child(Parent): # 定義子類
def myMethod(self):
print ('呼叫子類方法')
c = Child() # 子類範例
c.myMethod() # 子類呼叫重寫方法
super(Child,c).myMethod() #用子類物件呼叫父類別已被覆蓋的方法
重寫這些方法會在特定的條件下被呼叫,例如常用的_del_ 會在對生命週期結束時被回收時呼叫
_len_ 在呼叫len()函數時會被呼叫等
如圖所示是一個非常複雜的類繼承關係圖,程式碼展示如下
class A:
def __init__(self,a):
self.a = a
def Hello(self):
print("helloA")
class B:
def __init__(self,a):
self.a = a
def Hello(self):
print("helloB")
class B:
def __init__(self,a):
self.a = a
def Hello(self):
print("helloC")
class D(A):
def __init__(self,a,b):
A.__init__(self,a)
self.b = b
def Hai(self):
print("HiD")
class E(B,C):
def __init__(self,a,b):
C.__init__(self,a)
self.b = b
def Hello(self):
print("HelloC")
def Hai(self):
print("HiE")
class F(D,E,C):
def __init__(self,a,b,c):
D.__init__(self,a,b)
self.c = c