1. 程式人生 > >python_面向對象編程

python_面向對象編程

-s 增加 數據屬性 自己 以及 應該 pan 編程 括號

初始面向對象

一、類的實例化:

      調用類產生對象的過程稱為類的實例化,
實例化的結果是一個對象,或稱為一個實例
class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def run(self):
        print(%s is running % self.name)


obj = People(carter, 18, male
) # 會產生對象的名稱空間,如何查看 print(obj.__dict__)
print(obj.name)
實例化做了三件事
1、先產生一個空對象
2、自動觸發類內部__init__函數的執行
3、將空對象,以及調用類括號內傳入的參數,一同傳給__init__,為對象定制獨有的屬性

對象的增刪改查
obj.hobby = beauty  # 增加
del obj.name  # 刪除
obj.age = 20  # 修改
print(obj.__dict__)  # 查找

二、對象屬性的查找順序:先找對象自己的名稱空間----》類的名稱空間

class
People: x=1 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def run(self): #self=obj print(%s is running %self.name) #obj.name obj=People(carter,18,male) #People.__init__(obj,‘carter‘,18,‘male‘) obj1=People(carter1
,18,male) #People.__init__(obj,‘carter1‘,18,‘male‘) obj2=People(carter2,18,male) #People.__init__(obj,‘carter2‘,18,‘male‘) #1、類的數據屬性:是給對象用的,而且直接共享給所有對象用的,內存地址都一樣 print(People.x) People.x=11111 print(id(People.x),People.x) obj.x=obj================》 print(id(obj.x),obj.x) print(id(obj1.x),obj1.x) print(id(obj2.x),obj2.x) # 2、類的函數屬性:也是給對象用,但是綁定給對象用的,綁定到不同的對象就是不同的 # 綁定方法,內存地址都不一樣,但其實只想都是同一個功能 print(People.run) # <function People.run at 0x00000226E7C78A60> People.run(123123) People.run(obj) print(obj.run) print(obj1.run) print(obj2.run)

三、綁定方法的特殊之處:

    1、 綁定給誰就應該由誰來調用,
2、誰來調用就會把誰當做第一個參數傳入
class People:
    x=1
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def run(self): #self=obj
        print(%s is running %self.name) #obj.name

    def f1():
        print(from f1)

    def f2(self):
        pass

obj=People(carter,18,male) #People.__init__(obj,‘carter‘,18,‘male‘)

obj.run()
obj1.run()
obj2.run()

print(People.f1)
People.f1()
print(obj.f1)
obj.f1() #People.f1(obj)

小練習

技術分享圖片
class People:
    def __init__(self, name, aggressiveness, life_value):
        self.name = name
        self.aggressiveness = aggressiveness
        self.life_value = life_value

    def bite(self, enemy):
        enemy.life_value -= self.aggressiveness
        print("""
        [%s]咬了一條[%s]
        狗掉血[%s]
        狗還剩血量[%s]
        """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value))


class Dog:
    def __init__(self, name, aggressiveness, life_value):
        self.name = name
        self.aggressiveness = aggressiveness
        self.life_value = life_value

    def bite(self, enemy):
        enemy.life_value -= self.aggressiveness
        print("""
        [%s]咬了一個[%s]
        人掉血[%s]
        人還剩血量[%s]
        """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value))


p1 = People(, 60, 100)
d1 = Dog(, 80, 200)

p1.bite(d1)
d1.bite(p1)
人狗大戰

技術分享圖片

from math import pi

class Circle:
    ‘‘‘
    定義了一個圓形類;
    提供計算面積(area)和周長(perimeter)的方法
    ‘‘‘
    def __init__(self,radius):
        self.radius = radius

    def area(self):
         return pi * self.radius * self.radius

    def perimeter(self):
        return 2 * pi *self.radius


circle =  Circle(10) #實例化一個圓
area1 = circle.area() #計算圓面積
per1 = circle.perimeter() #計算圓周長
print(area1,per1) #打印圓面積和周長
計算圓面積和周長




python_面向對象編程