python--面向对象(02)

1.类的成员

在类中你能写的所有内容都是类的成员

 

class 类名:
    # 方法
    def __init__(self, 参数1, 参数2....):
        # 属性变量量
        self.属性1 = 参数1
        self.属性2 = 参数2
        ....
        
        # ⽅法
        def method(self):
        pass   

  

 

2.变量

1.实例变量:每个实例都该拥有的变量,由对象去访问的变量. 比如,认得名字,人的爱好每个人的个人信息

2.类变量:这一类事物同意拥有的变量. 此时.这个变量属于类.但是对象也可以访问. 比如,中国人都拥有同一个国家

class Person:
# 类变量, 表示所有的该类的对象都共享这个变量.
    country = "中国"
    def __init__(self, name, num, birthday):
    # 实例例变量(字段) 表示你创建的每一个人都有这三个变量
        self.name = name
        self.num = num
        self.birthday = birthday

p1 = Person("mike", 18, "1999年")
print(p1.name) # mike
print(p1.country) #中国
p2 = Person("bob", 28, "1999年")
print(p2.name) # bob
print(p2.country) # 中国

实例变量中都隐藏着一个创建这个对象的类.通过这个类就能找到我们类中定义的全部内容,包括方法和属性信息等

 

 

p1 = Person("mike", 18, "1999年")
p1.country = "美国"
print(p1.name)
print(p1.country) # 美国
p2 = Person("bob", 28, "1999年")
print(p2.name)
print(p2.country) # 中国

上面这里其实并没有改变类变量,只是在p1中添加了一个实例变量. 类变量最好是用类名访问,通过对象名也可以访问,但只能看,不能改变,如果想要改变它.需要用类名来改变

class Foo:
    count = 0
    def __init__(self):
        Foo.count += 1
print(Foo.count) # 0
Foo()
Foo()
Foo()
print(Foo.count) # 3

实例变量,给对象用的.

类变量,多个对象共享的.

 

 

3.方法

1.实例方法(成员方法): 使用   对象.方法()   说白了对象直接访问的方法叫成员方法.

特点: 在声明的时候.需要给出self,self必须放在第一个位置,在调用的时候,自动的会把对象传递给形参的self

class Computer:
    # 实例方法(成员方法)
    def play(self):
        print("我的电脑可以玩儿")
        
c = Computer()
c.play() # 对象直接去调用实例方法

  

2.类方法(@calssmethod):类方法是属于类的

特点:在声明的时候需要给出一个能够接受类名的参数,cls,也必须在调用的时候,自动的把xx对象的类传递给cls

class Computer:
    def play(self):
     print("我的电脑可以玩儿")
    @staticmethod
    def fare():
        print("我的电脑非常厉害, 可以煎鸡蛋")
    @classmethod
    def cal(cls, a, b):
        print(cls)
        return a+b
print(Computer.cal(1, 2)) # 此时会自动的把类名传递给类方法的第⼀个参数

  

3.静态方法(@staticmethod): 静态方法也是属于类的.静态方法就好比,我们在类中定义了一个函数,静态方法一般和类方法差不多.使用类名去访问

 

@staticmethod
def fare():
    print("我的电脑⾮常厉害, 可以煎鸡蛋")
静态⽅法和静态变量一样. ⼀般都是使⽤类名直接访问和调用的.
Computer.fare() # 类名可以直接访问的
c.fare() # 对象也可以访问. 但最好不要这么干. 以便于区分静态方法和实例方法

  

4.属性

在方法上添加一个@property.可以把一个方法变成一个属性,但是这个属性不可以被赋值,当我们某一个属性必须经过计算才能得到结果的时候

class Person:
    def __init__(self):
        pass
    @property
    def age(self):
        return 1
p = Person()
age = p.age
print(age)

1.比如保存出生年月日用程序来计算年龄.对于年龄来说,应该是一个数值

2.调用的时候,直接当成属性变量来用就可以了.

3.这样只能取值,不能设置值

 

 

5.私有

所有以双下滑线开头的方法,变量都是私有内容.外界无法访问.除非你主动暴露这些内容

1.私有变量

私有的内容不能直接访问.但是如果对方开辟了外界访问的通道(公共方法). 那可以通过这个公共的方法来获取到私有的内容,类变量(静态变量)一样拥有这样的属性

2.私有方法

class Person:
    def __init__(self):
        pass
    def __yue(self):
        print("我要约会")
    def job(self):
        print("我要工作")
        self.__yue() # 在自己类中访问自己的其他方法. 哪怕是私有的. 也是自己在用
p = Person()
p.job()

  对于私有方法,子类是无法继承的

class Fu:
    __q = "嘻嘻"
class Zi(Fu):
    pass
print(Zi.__q) # 报错

  

总结:

 

posted @ 2018-12-18 21:26  robertx  阅读(171)  评论(0编辑  收藏  举报