Day17--Python--面向对象--成员

馋奶兔 提交于 2020-01-01 04:49:17
成员    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私有

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!