zoukankan      html  css  js  c++  java
  • Day17--Python--面向对象--成员

    成员
    class Person:
    def __init__(self, name, num, gender,birthday):
    # 成员变量(实例变量)
    self.name = name
    self.num = num
    self.gender = gender
    self.birthday = birthday

    # 对象来访问(成员方法) (实例方法)
    def marry(self, partner):
    print('人会结婚%s' % partner)

    成员: 在类中定义的变量和方法都被称为成员
    class Person:
        country = "中国"  # 类变量. 不属于对象, 对象可以访问.
    
        def __init__(self, name, num, gender, birthday):
            # 成员变量(实例变量)
            self.name = name
            self.num = num
            self.gender = gender
            self.birthday = birthday
    
        # 对象来访问(成员方法)(实例方法)
        def marray(self, duifang):
            print("人会结婚%s" % duifang)
    
    alex = Person("李杰", 10086, "", "昨天")
    alex.country = "澳大利亚" # 注意。 这里和类变量没由一毛钱关系, 给alex单独加一个属性叫country = ”澳大利亚“
    
    wusir = Person("吴佩琪", 10010, "", "今天")
    
    print(alex.country) # 澳大利亚 # 拿到的是自己的。成员实例变量 字段
    print(wusir.country) # 中国
    print(Person.country)   # 中国
    
    # 总结:类变量,用类名去操作. 规范.
    View Code实例方法,实例变量
        变量
    1. 成员变量(实例变量)(字段column(数据库中的列)) 每个实例都拥有的变量 (重点)
    2. 类变量(静态变量) 直接写在类中的,共享出去的.
    方法
    1. 成员(实例)方法 加了self,调用的时候必须用对象去访问. (重点)
    2. 类方法 当方法需要传递类名的时候,需要类方法,规范: 在上方加@classmethod 系统自动把类名传递给类方法的第一个参数
    3. 静态方法 当你的方法不需要传递当前类的对象的时候. 语法规则:在方法上面加@staticmethod #静态内容用类名访问 [dict.fromkeys(*args, **kwargs)]

    面试题: 说一说,静态方法,类方法和实例方法的区别.
          静态方法: 当方法不需要传递当前类的对象的时候,只是在类中定义的一个函数,一个功能,方法上面加@staticmethod
          类方法: 当方法需要传递类名的时候使用,方法上加@classmethod
          实例方法: 用对象去访问的方法.



    class Person:
    
        def __init__(self):
            pass
        # 实例方法需要传递类的对象 self
        def think(self):
            print("人能思考")
    
        # 静态方法不需要传递对象或者类
        @staticmethod # 静态方法
        def jisuan(a, b):
            print("我来过这里")
            return a + b
    
        # 类方法: 第一个参数传递的是类名
        @classmethod
        def clsMethod(cls): # cls表示的类
            p = cls() # 可以动态的创建对象.
            print("我是一个类方法", p)
    
    
    p = Person()
    p.think()
    
    Person.think(p)
    
    # 静态方法的调用:
    
    c = Person.jisuan(1, 2) #  类名可以访问
    print(c)
    
    p = Person()
    d = p.jisuan(3, 5) # 用对象也可以访问,但是不规范
    print(d)
    
    # 记住, 静态的内容用类名访问
    
    Person.clsMethod() # 类方法默认第一个参数接收的是类名
    View Code静态方法与类方法

    属性
    用方法来描述属性信息
    注意:
    1. @property 改变一个方法成为属性
    2. 这个方法只能有一个参数, self
    3. 必须有返回值
    class Person:
    
        def __init__(self, name, num, gender, birthday):
            self.name = name
            self.num = num
            self.gender = gender
            self.birthday = birthday
    
    
        @property # 表示当前方法是一个属性. 方法的返回值就是这个属性的值
        def age(self): # 方法只能有一个参数, self
            return 10 # 必须有返回值
    
    
    p = Person("alex", "10086", "不详", "1989年12月1日")
    print(p.age) # 可以直接访问属性, 实际上访问的是age()方法. 返回值就是属性值
    View Code属性


    私有
    只能在自己类中访问.

    __方法
    __变量
    __类变量
    都是私有, 别人访问不到,子类也不能访问
    class Tiger:
    
        def __init__(self, name, waibiao, qingzhenglianjiedezuofeng, qingfu, money, fangchan):
            self.name = name
            self.waibiao = waibiao
            self.qingzhenglianjiedezuofeng = qingzhenglianjiedezuofeng
            self.__qingfu = qingfu
            self.__money = money
            self.__fangchan = fangchan
    
        def buy(self):
            print("我有%s" % self.__money)
            self.__sel()
    
        def __sel(self):
            print("我要卖掉%s" % self.__fangchan)
    
    
    lh = Tiger("alex", "正直", "非常刚正不阿, 666", "小潘潘", 10000000000, 5)
    print(lh.qingzhenglianjiedezuofeng)
    print(lh.name)
    print(lh.waibiao)
    lh.buy()
    # lh.__sel()
    # print(lh.__money)
    View Code私有
  • 相关阅读:
    poj 3744 题解
    hdu 1850 题解
    New World
    CSP2019游记
    LOJ6052 DIV
    CF809E Surprise me!
    Luogu4548 歌唱王国
    Luogu4581 想法
    Note 5.26-5.28
    LOJ6519 魔力环
  • 原文地址:https://www.cnblogs.com/surasun/p/9707313.html
Copyright © 2011-2022 走看看