25
2018
07

python中class的概念、定义和使用、类的继承等知识

类的概念,定义,使用demo:

#coding:utf-8
"""
类的概念:类是指一类事物,比如说:手机,有属性型号、价格,有功能 打电话,发短信,wifi等等
对象的概念:对象就是类的具体化,比如说:华为p10
类的定义:类名,首字母大写,驼峰命名(每个单词首字母大写),如果类名后不写(),则默认继承自object
class [类名][(父类名称,可以0~多个以逗号分隔)]:
    #属性、函数
"""
class Person():
    """Person类,类的属性可以动态创建"""
    def __init__(self,name,age):
        """初始化方法,初始化属性值,self代表当前对象"""
        self.name=name
        self.age=age
        """双下划线开头属性为私有属性,外部不能访问"""
        self.__company='c1'
        #print(self.__company)
        pass
    def get_company(self):
        """访问私有属性方法"""
        return self.__company
    def set_company(self,company):
        """设置私有属性方法,可以做效验判断"""
        if company!=None and company !='':
            self.__company=company
            pass
    def eat(self):
        """定义一个类的普通方法"""
        print("{} eat~".format(self.name))
        pass
    def make_car(self,name,speed):
        car = Car(name,speed)
        return car
    def drive(self,car):
        car.run()
        print("{}开着他的小突突【{}】以{}KM/H速度行驶".format(self.name,car.name,car.speed).decode("utf-8"))
        pass
    def __test_private(self):
        """双下划线开头方法为私有方法,外部不能访问"""
        print("test_private")
        pass
class Car():
    def __init__(self,name,speed):
        self.name=name
        self.speed=speed
        pass
    def run(self):
        print("{}正在公路上行驶……".format(self.name).decode("utf-8"))
"""创建对象,构造函数赋值过程
p1->self
Json->name
20->age
"""
p1=Person("Json",20)
print(p1.name,p1.age,p1.get_company())
p1.eat()
car = p1.make_car("大白",60)
p1.drive(car)
"""16进制打印对象内存地址"""
#print(hex(id(p1)))
"""判断一个对象是否属性某类"""
#print(isinstance(p1,Person))


类的继承、方法覆盖、伪多态等demo

#coding:utf-8
"""类的继承:子类有父类特性(父类私有属性和方法不会被继承)
方法覆盖:如果子类方法跟父类一样,会把父类方法覆盖掉
如果一个方法在子类不存在,而在多个父类中存在,则调用不确定,由c3算法确定,可调用 子类.__mro__ 查看方法的解释顺序
"""
class Person:
    """Person类,类的属性可以动态创建"""
    def __init__(self,name,age):
        """初始化方法,初始化属性值,self代表当前对象"""
        self.name=name
        self.age=age
        pass
    def eat(self):
        """定义一个类的普通方法"""
        print("person {} eat~".format(self.name))
        pass
class Student(Person,object):
    def __init__(self,name,age,sn):
        """初始化方法,初始化属性值,self代表当前对象
        调用父类的__init__方法
        """
        super(Student,self).__init__(name,age)#在python2中,Person需要继承自object,不然会报错
        #Person.__init__(self,name,age)
        self.sn=sn#学号
        pass
    def eat(self):
        """定义一个类的普通方法"""
        print("student {} eat ~".format(self.name))
        pass
    def study(self):
        """定义一个类的普通方法"""
        print("{} study~".format(self.name))
        pass
    pass
class Fish:
    def eat(self):
        """定义一个类的普通方法"""
        print("fish eat ~")
"""伪多态,因为python数据没有类型,那么也不存在真正的多态的概念
(伪多态也叫鸭子类型,理解:如果一个对象不是鸭子,但有些特征,比如:走路像鸭子,吃饭像鸭子等等,那么就可以把它当成鸭子处理)"""
def duck(person):
    person.eat()#只要有eat()方法的对象,都可以调用成功
    pass
def main():
    p1=Person("jack",22)
    s1=Student("Jefy",18,"007")
    print(p1.name,p1.age)
    p1.eat()
    print(s1.name,s1.age,s1.sn)
    s1.eat()
    s1.study()
    print("\n查看方法的解释顺序".decode("utf-8"))
    print(Student.__mro__)
    print("\n伪多态".decode("utf-8"))
    p=Person("p1",10)
    duck(p)
    f=Fish()
    duck(f)
main()




版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。