面向对象

类 : 是对一类事物抽象出来的特性的集合(属性和方法)
制造月饼的模具
对象: 由类生成出的一系列实例
一个个真实的月饼
属性和方法是一个整体,属性就是变量,方法就是函数

示例:
class Dog:
def init(self,name,age,color):
self.name = name
self.age = age
self.color = color

    def eat(self):
        print('it is eating')

    def run(self):
        print('it is running')

jm = Dog('jm',1,'gloden')

sm = Dog('sm',2,'white')

jm.run()
sm.eat()
print(sm.name)

类 内置属性
python基类的自带的属性,可以通过内置属性获得类本身相关的信息。
dict : 类的属性(包含一个字典,由类的属性组成,没有实例属性)
doc : 类的文档字符串
name: 类名
module: 类定义所在的模块
bases : 类的所有父类构成元素(所有父类组成的元组)

类 内置方法
使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法第一个参数为self。
内置方法为python基类中定义的方法,这些方法实现了特定的功能,可以在自定义类的重载方法。
init 构造函数,在生成对象时调用
del 析构函数,释放对象时使用
repr 打印时进行转换
str 转化为字符串,python3推荐
call 函数调用

示例:
class Dog:
‘’‘haha’’’
var = 100
def init(self,name,age,color):
print(‘start’)
self.name = name·
self.age = age
self.color = color
def str(self):
return ‘hello can you see me’
def call(self, *args, **kwargs):
return ‘call’

    def __del__(self):
        print('delete')

sm = Dog('sm',1,'white')
print(sm)
print(sm())

面向对象的三大特性是指:封装、继承和多态。
封装: 屏蔽内部的复杂性,给用户只提供一个接口,用户不需要了解内部的实现
继承: 一个类可以继承其它类实现好的功能,在其它类的基础上进一步丰富功能
class Dog:
def init(self,name,age,color):
self.name = name
self.age = age
self.color = color
def run(self):
print(‘running’)

        class XTQ(Dog):
            def __init__(self,*args):
                #Dog.__init__(self,*args)
                super().__init__(*args)

            def fly(self):
                print(' it can fly')

        sm = Dog('sm',1,'white')
        xtq = XTQ('xtq',1000,'black')
        xtq.fly()
多态 : 同一个操作,当对象不同时,行为也不同

python通用的命名约定
文件名: 全小写
变量名: 全小写
常量: 全大写 PI
类名: 采用大驼峰 MyClass
类中属性:
name : 普通变量
name : 内置变量,一般有特殊含意,最好不要定义此类变量
__name : 私有变量,此变量不能被实例直接访问(全靠自觉)
_name : 私有变量,不建议实例直接访问

示例:
class Person:
def init(self,name,blood=100):
self.name = name
self.__blood = blood

    def hit(self,obj):
        print('{} hit {}'.format(self.name,obj.name))
        obj.sub()

    def sub(self,val = 10):
        self.__blood -= val

    def show_blood(self):
        print('{} blood is {}'.format(self.name,self.__blood))

p1 = Person('奥特曼')
p2 = Person('小怪兽')
p1.show_blood()
p2.show_blood()
p1.hit(p2)
p2._Person__blood = 1000
p1.show_blood()
p2.show_blood()

示例:
class Dog:
def init(self,name,age):
self.name = name
self.__age = age

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self,val):
        if val > 20 or val < 1:
            raise ValueError('age {} is invalid'.format(val))
        else:
            self.__age = val

sm = Dog('sm',2)
print(sm.age)
sm.age = 15
print(sm.age)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章