#面向對象基礎:類及對象的創建,實例屬性的初始化,訪問及修改
class Dog():
#構造函數,每次對象創建時調用,同java,但每個類只能有一個
def __init__(self, name, age):
self.name = name #self.name屬性爲實例屬性,可通過實例名.屬性名訪問;亦可通過方法訪問修改同java的public屬性
self.age = age
def sit(self):
print(self.name.title()+" is now sitting")
def roll_over(self):
print(self.name.title()+" rolled over!")
my_dog = Dog("willie", 6)
print("My dog's name is "+my_dog.name.title() + ".")
print("MY dog is "+ str(my_dog.age) + " years ol.")
#python繼承,python是多繼承的,繼承一個類則代表繼承了類的所有方法和屬性,同java裏父類的屬性方法都是public的情況類似
#python多繼承,方法,屬性的獲取通過MRO(method resoulution order)查找,即每個類的__mro__屬性
class Car():
__num = "1233" #變量名前加__代表是私有變量同java的private
count = "0"
@classmethod #類方法,通過類名.方法名調用,可以被繼承
def get_num(cls):
return cls.__num
@staticmethod
def showTime(): #可以通過對象實例及其子類對象方法,也可通過類名訪問
print("我是靜態方法")
def __init__(self, make, model, year ):
print("i'm the father class .")
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 #odometer_reading默認值爲0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has "+ str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading=mileage
else:
print(" You can't roll back an odometer !")
def increment_odometer(self, miles):
self.odometer_reading += miles
#繼承car
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
print("i'm the child class. ")
my_test = ElectricCar('tesla', 'modele s', 2016)
print(my_test.get_descriptive_name()) #通過子類對象調用繼承的父類方法
print(Car.get_num())
print(ElectricCar.get_num())
print(Car.count) #通過對象實例訪問類屬性
print(my_test.showTime()) #通過對象實例訪問靜態方法
print(ElectricCar.showTime()) #通過類名訪問靜態方法
#print(Car.__num) 私有變量不能被訪問