(8)python 类和对象

一、类和对象

python可以动态的添加删除变量和方法

类中的方法至少要有一个参数,第一个参数会被绑定到类的实例上,通常命名为self

1.构造函数

类中的构造方法名为 __init__(self,...,...),如果类没有定义构造方法,则会自动包含一个只有self的构造方法

class Person:
    '这是一个Person类'
    def __init__(self,name='tom',age=10):
        print('创建一个Person类')
        self.name=name
        self.age=age
    def say(self,content):
        print(content)

python一个类只有一个构造函数。不向java  net 可以重载多个构造函数

2.创建对象

调用构造方法创建类的对象,不需要使用new关键字

p=Person()#打印创建一个Person类

调用

p.name
p.say('你好')

赋值

p.name='lilei'

 

3.动态操作对象

动态添加变量

p.skills=['Singing','Swimming']

动态删除变量

del p.name

动态创建方法

动态创建方法是,不会自动绑定到第一个参数,所以调用方法时,需要手动绑定

def hi(self):
    print("say hello")

p.hello=hi
p.hello(p)

如果想要动态的方法能自动绑定需要用到types模块下的MetodType

4.self

类中使用一个方法调用另一个方法

class Dog:
    def jump(self):
        print('jump')
    def run(self):
        self.jump()
        print('run')
p=Dog()
p.run()

 

二、方法

1.方法调用

def a():
    print('全局的a方法')
class Dog():
    def a():
        print('Dog下的a方法')
    def b(self):
        print( self ,'Dog下的b方法')

a()#使用全局方法
Dog.a()#使用位绑定的类方法
########
dog=Dog()
dog.b()#使用位绑定的类方法
Dog.b(dog)#使用位绑定的类方法
Dog.b('dog')#使用位绑定的类方法,实例名可以不是Dog类,任意字符串即可

打印

2.类方法和静态方法

 类方法和静态方法可以直接调用函数,区别是类方法会自动绑定

 

class Dog():
    @classmethod
    def a(self):
        print('Dog下的a方法')
    @staticmethod
    def b(self):
        print( self ,'Dog下的b方法')
        
Dog.a()
Dog.b('dog')

3.函数修饰器@

 

 三、成员变量

1.类变量和实例变量

在类中没有操作实例变量时,得出的结果都是相同的

class Student:
    age=8
    name='tom'

Student.name#类变量 打印tom
 stu=Student() stu.name#实例变量 打印tom、

如果在构造函数创建实例后,类变量和实例变量会变成两个不一样的变量

class Student:
    age=8
    name='tom'
    def s(self,age,name):
        #新创建的两个实例变量
        self.age=age
        self.name=name
stu=Student()
stu.s(10,'jack')

print(Student.name)#打印 tom
print(stu.name)#打印 jack

2.用property函数定义属性

 

四、封装

双下划线

五、继承

1.继承

定义类时使用(父类1,父类2,...)表示继承,python允许多继承

class Fruit:
    def fruit(self):
        print('水果类')

class Food:
    def food(self):
        print('食物类')

class Apple(Fruit,Food):#继承水果和食物类
    def apple(self):
        print('苹果类')

a=Apple()
a.apple()
a.fruit()
a.food()

2.重写父类方法

class Apple(Fruit,Food):
    def fruit(self):
        print('苹果类')

3.

 

 

六、动态性

python是动态语言,可以动态增加删除

七、多态

由于python是弱语言天生带有多态性

八、枚举

 

 

posted @ 2019-02-01 14:49  富坚老贼  阅读(250)  评论(0编辑  收藏  举报