zoukankan      html  css  js  c++  java
  • python_类与对象

    1.

    2.实例变量就是对象个体特有的数据,例如狗狗的名称和年龄等。

    3.构造方法:--init--()方法是构造方法,构造方法用来初始化实例变量。

    #coding=utf-8
    class Dog:
    def __init__(self,name,age):#构造方法
    self.name=name #创建和初始化实例变量name
    self.age=age #创建和初始化实例变量age
    d=Dog('球球',2) #创建对象
    print('我家狗狗名字叫{0},{1}岁了'.format(d.name,d.age))

    4.构造方法

    class Dog:
    def __init__(self,name,age,sex='雌性'):
    self.name=name #创建和初始化实例变量name
    self.age=age # 创建和初始化实例变量age
    self.sex=sex #创建和初始化实例变量sex
    d1=Dog('球球',2) #创建对象调用构造方法,省略默认值
    d2=Dog('哈哈',1,'雄性')
    d3=Dog(name='拖布',sex='雄性',age=3) #使用关键字参数调用构造方法
    print('{0}:{1}岁{2}'.format(d1.name,d1.age,d1.sex))
    print('{0}:{1}岁{2}'.format(d2.name,d2.age,d2.sex))
    print('{0}:{1}岁{2}'.format(d3.name,d3.age,d3.sex))

    5.实例方法
    实例方法和实例变量一样,都是某个实例(或对象)个体特有的方法。
    class Dog:
    #构造方法
    def __init__(self,name,age,sex='雌性'):
    self.name=name #创建和初始化实例变量name
    self.age=age #创建和初始化实例变量age
    self.sex=sex #创建和初始化实例变量sex
    #实例方法
    def run(self): #定义实例方法,只有一个self参数
    print("{}在跑。。".format(self.name))
    #实例方法
    def speak(self,sound): #定义实例方法 ,第一个参数时self,第二个参数是sound
    print('{}在叫,"{}"!'.format(self.name,sound))

    dog=Dog('球球',2) #创建对象调用构造方法,省略默认值
    dog.run() #在调用时采用“对象.实例方法”形式,不需要传递参数
    dog.speak('旺 旺 旺') #需要传递一个参数sound
    6.类变量:属于类的变量,不属于单个对象
    举例:1)Account(银行账户)类:有三个成员变量:amount(账户金额),interset_rate(利率),owner(账户名).
    amount,owner对于每一账户都是不同的-实例变量
    interest_rate对于所有账户都是相同的,-所有账户实例共享的变量,属于类,类变量

    class Account:
    interest_rate=0.0568 #类变量
    def __init__(self,owner,amount):
    self.owner=owner #创建并初始化实例变量owner
    self.amount=amount #创建并初始化实例变量amount
    account=Account("Tony",80000)
    print('账户名:{0}'.format(account.owner))
    print('账户金额:{0}'.format(account.amount))
    print('利率:{0}'.format(Account.interest_rate)) #对类变量通过‘类名.类变量’形式访问

    7.类方法
    #coding=utf-8
    class Account:
    interest_rate=0.0668 #类变量

    def __init__(self,owner,amount):
    self.owner=owner #定义实例变量
    self.amount=amount#定义实例变量
    #类方法
    @classmethod #定义类方法需要的装饰器
    def interest_by(cls,amt): #cls代表类本身,即account类
    return cls.interest_rate*amt
    interest=Account.interest_by(12000)
    print('计算利息:{0}'.format(interest))

    8.封装性
    私有变量:—— ——XX

    #coding=utf-8
    class Account:
    __interest_rate=0.0568 #私有类变量
    def __init__(self,owner,amount):
    self.owner=owner #创建并初始化公有实例变量owner
    self.__amount=amount #创建并初始化私有实例变量__amount
    def desc(self):#在类的内部可以访问私有变量
    print("{0}金额:{1}利率:{2}".format(self.owner,self.__amount,Account.__interest_rate))

    account=Account('Tony',8000)
    account.desc()
    print("账户名:{0}".format(account.owner))
    print('账户金额:{0}'.format(account.__amount))#报错,在类的外部不可以访问私有变量
    print('利率:{0}'.format(Account.__interest_rate))#报错,在类的外部不可以访问私有变量
    私有方法
    class Account:
    __interest_rate=0.0568 #私有类变量
    def __init__(self,owner,amount):
    self.owner=owner #创建并初始化公有实例变量owner
    self.__amount=amount #创建并初始化私有实例变量__amount
    def __get_info(self):#定义私有方法
    return "{0}金额:{1}利率:{2}".format(self.owner, self.__amount, Account.__interest_rate)
    def desc(self):
    print(self.__get_info())#在类的内部可以调用私有方法

    account=Account('Tony',8000)
    account.desc()
    account.__get_info#报错 在类外部不可以调用私有方法
    9.使用属性
    为了实现对象的封装,在一个类中不应该有公有的成员变量,这些成员变量应该被设计成私有的,然后通过公有的set和get方法访问
    class Dog:
    #构造方
    def __init__(self,name,age,sex='雌性'):
    self.name=name #创建和初始化实例变量name
    self.__age=age #创建和初始化私有实例变量__age

    def run(self):
    print("{}在跑".format(self.name))
    #get方法
    def get_age(self):#定义get()方法,返回私有实例变量__age
    return self.__age
    def set_age(self,age):#定义set()方法,通过age参数更新私有实例变量__age
    self.__age=age

    dog=Dog('球球',2)
    print('狗狗年龄:{}'.format(dog.get_age()))
    dog.set_age(3)
    print('修改后狗狗年龄:{}'.format(dog.get_age()))
    10.上面例子,外部调用者通过2个公有方法访问被封装的私有成员变量,比较麻烦,可以在类中定义属性,属性可以替代get()和set()两个公有方法。
    class Dog:
    #构造方法
    def __init__(self,name,age,sex='雌性'):
    self.name=name #创建和初始化实例变量name
    self.__age=age #创建和初始化私有实例变量__age
    #实例方法
    def run(self):
    print("{}在跑。。。".format(self.name))
    @property
    def age(self):#替代get_age(self),定义age属性的get()方法,使用@property装饰器进行修饰,方法名就是属性名,即age
    return self.__age
    @age.setter
    def age(self,age):#替代set_age(self,age),定义age属性的set()方法,使用@age.setter装饰器进行修饰,age是属性名
    self.__age=age
    dog=Dog('球球',2)
    print('狗狗年龄:{}'.format(dog.age))
    dog.age=3
    print('狗狗年龄:{}'.format(dog.age))
    11.继承

    class Animal:
    def __init__(self,name):
    self.name=name #初始化父类的实例成员变量name
    def show_info(self):
    return "动物的名字:{0}".format(self.name)
    def move(self):
    print("动一动。。")
    class Cat(Animal):
    def __init__(self,name,age):
    super().__init__(name) #调用父类构造方法,初始化父类成员变量
    self.age=age #实例变量age
    cat=Cat('Tom',2)#创建cat对象时调用Cat类构造方法
    cat.move()
    print(cat.show_info())

    12.多继承:如果在多个父类中有相同的成员方法或成员变量,则子类优先继承左边父类的成员方法或者成员变量
    #多继承
    class Horse:
    def __init__(self,name):
    self.name=name #实例变量name

    def show_info(self):
    return "马的名字:{0}".format(self.name)
    def run(self):
    print("马跑。。。")
    class Donkey:
    def __init__(self,name):
    self.name=name
    def show_info(self):
    return "驴的名字:{0} ".format(self.name)
    def run(self):
    print("驴跑。。。")
    def roll(self):
    print("驴打滚...")

    class Mule(Horse,Donkey):
    def __init__(self,name,age):
    super().__init__(name)
    self.age=age #实例变量

    m=Mule('骡宝利',1)
    m.run() #继承父类Horse方法
    m.roll() #继承父类Donkey方法
    print(m.show_info())#继承父类Horse方法
    13.方法重写
    如果子类的方法名和父类的方法名相同,则子类的方法会重写override父类的同名方法
    #重写
    class Horse:
    def __init__(self,name):
    self.name=name #实例变量name

    def show_info(self):
    return "马的名字:{0}".format(self.name)
    def run(self):
    print("马跑。。。")
    class Donkey:
    def __init__(self,name):
    self.name=name
    def show_info(self):
    return "驴的名字:{0} ".format(self.name)
    def run(self):
    print("驴跑。。。")
    def roll(self):
    print("驴打滚...")

    class Mule(Horse,Donkey):
    def __init__(self,name,age):
    super().__init__(name)
    self.age=age #实例变量
    def show_info(self):
    return "骡子:{0},{1}岁".format(self.name,self.age)

    m=Mule('骡宝利',1)
    m.run() #继承父类Horse方法
    m.roll() #继承父类Donkey方法
    print(m.show_info())#子类Mule自己的方法,不继承父类Horse方法

    14.继承与多态
    在多个子类继承父类,并重写父类方法后,这些子类所创建的对象之间就是多态的。这些对象采用不同的方式实现父类方法
    #多态
    class Animal:
    def speak(self):
    print('动物叫,但不知道是哪种动物叫!')
    class Dog(Animal):
    def speak(self):
    print('小狗:汪汪')
    class Cat(Animal):
    def speak(self):
    print('小猫:喵喵')
    an1=Dog()
    an2=Cat()
    an1.speak()
    an2.speak()
    15.

  • 相关阅读:
    04_数字信号滤波Matlab代码_常见操作
    03_FIR滤波器的设计
    CH340 USB to TTL connect to STM32F207 TTL UART
    linux内核中如果内存越界破坏了semphore同样会导致RCU STALL
    Build自己的kernel header
    事实证明,PHY Identify在外部电路异常情况下也是会发生变化的。
    vim配置参考
    技术经典图书(附电子版下载地址)
    转:linux内核源代码分析方法
    定期保存2017-04-19
  • 原文地址:https://www.cnblogs.com/JacquelineQA/p/13193405.html
Copyright © 2011-2022 走看看