面向对象编程

2018-08-24  本文已影响0人  Snackk

类:

一:我们定义的类的属性到底存到哪里了?有两种方式查看

二:特殊的类属性

三:万能的"."

操作方法 一般不通过类名操作!
类.函数名(对象名)

实例化:类——>对象的过程
self:在实例化时自动将对象/实例本身传给__init__的第一个参数
语法:对象名 = 类名(参数)

实例化过程内部进行了三个阶段:

对象操作对象空间:

对象操作类空间的属性 只能查

对象操作类空间的方法 --->>对象.方法()

对象能调用类中的属性与方法而且只是调用,不能改变
先从自己空间去找,没有此属性他会通过类对象指针从类去找, 类中找不到,会从父类去找。

类不能调用对象的属性

对象与对象之间可不可互相调用?
同一个类实例化出来的对象之间是不能互相访问的。
不同类实例化的对象有可能互相访问。

给对象封装属性:__init__ 任意位置 --->> 注意:在方法中也ok

class 类名:

    属性 = 值
    def __init__(self,形参):
        self.属性 = 形参

    def 方法(self):
        pass

    def pen(self): 需要额外添加的属性 ---->>任意位置添加属性
        self.属性=值
对象 = 类(实参)

组合:给一个类的对象封装一个属性,这个属性是另一个类的对象
组合的意义:让类的对象与另一个类的对象产生关系,类与类产生关系

class Game_role:

    def __init__(self,name,ad,hp):
        self.name = name
        self.ad = ad
        self.hp = hp

    def attack(self,role):
        role.hp=role.hp-self.ad
        print('%s攻击%s,%s掉了%s血, 还剩%s血'%(self.name,role.name,role.name,self.ad,role.hp))

    def foo(self,w):
        self.属性 = 另一个类的对象

class Weapon:
    def __init__(self,name,ad):
        self.name = name
        self.ad = ad

    def fight(self,role1,role2):
        role2.hp = role2.hp - self.ad
        print('%s 用 %s 攻击了%s, %s掉了%s血,还剩%s血'%\
              (role1.name,self.name,role2.name,role2.name,self.ad,role2.hp))

p1 = Game_role('概论',30,3000)
p2 = Game_role('剑豪',100,2000)
w1 = Weapon('大保健',40)
w2 = Weapon('武士刀',100)

p1.attack(p2)  #def attack(self,role):

p1.foo(w1)
p1.Weapon.fight(p1,p2)
p2.foo(w2)
p2.Weapon.fight(p2,p1)

w1.fight(p1,p2)
w2.fight(p2,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) #打印圆面积和周长

class Ring:
    '''
    定义了一个圆环类
    提供圆环的面积和周长的方法
    '''
    def __init__(self,radius_outside,radius_inside):
        self.outsid_circle = Circle(radius_outside)
        self.inside_circle = Circle(radius_inside)

    def area(self):
        return self.outsid_circle.area() - self.inside_circle.area()

    def perimeter(self):
        return  self.outsid_circle.perimeter() + self.inside_circle.perimeter()


ring = Ring(10,5) #实例化一个环形
print(ring.perimeter()) #计算环形的周长
print(ring.area()) #计算环形的面积
class Foo:
   count = 0
   def __init__(self):
       Foo.count += 1

f1 = Foo()
print(f1.count)
f2 = Foo()
f3 = Foo()
f4 = Foo()
f5 = Foo()
print(f1.count)
print(f5.count)
print(Foo.count)
C:\Users\Administrator\PycharmProjects\Snack\venv\Scripts\python.exe
1
5
5
5

Process finished with exit code 0
class Foo:
    count = [0]

f1 = Foo()
f1.count[0] += 1
print(f1.count[0])
print(Foo.count[0])
f1.count = [2]
print(f1.count)
print(Foo.count)
1
1
[2]
[1]

Process finished with exit code 0
上一篇 下一篇

猜你喜欢

热点阅读