day17 面向对象-成员

今日主要学习了:

1 .成员 

2. 变量 

3. 方法

4.属性

5.私有 

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

2 .变量  

 1) 实例变量: 昨天写的就是实例变量 ,由对象去访问的变量 .

class Person: #创建一个人的类
    def __init__(self,name,id,gender,birth): # 创建初始化方法,创建方法
        self.name=name  #定义属性
        self.id=id
        self.gender=gender
        self.birth=birth
p=Person('alex','110','男','1989-12-12') #创建了一个人
p.birth='1999-1-1' #修改alex的出生年月
print('p.birth')  

  2) 类变量 , 此时这个变量属于类, 但是对象也可以访问

class Person:
    def __init__(self,name,gender):
        self.name=name
        self.gender=gender
p=Person('alex','男')
p2=Person('wusir','女)
p.country='中国' #   这里是在p这个人内部创建了一个country,并不是在外面
print('p.country')#打印结果为中国
Person.country='大清' # 这里是在Person中创建的国家,所以你每创建一个新的对象,他默认的country都是大清
print(p2.country) #这里的打印结果是大清 类变量可以给对象使用

3 .方法 

 1) 类方法 (默认在形参位置的参数是cls,并且加一个@classmethod)

类方法一般用类名去访问 Person.he() #类方法

def chi(self):
    print('人会吃')
@classmethod#装饰器 ,此时这个方法是一个类方法
def he(cls): #此时接收到的cls是类名
    print('人会喝')

 2) 实例方法 : 昨天学的就是实例方法

 3)静态方法 (@staticmethod)

@staticmethod #静态方法
def yue():
    print('今天约吗,小姐姐')

静态方法可以使用对象访问.也可以使用类名访问.

但是一般推荐使用类名访问

P=person()  

P.yue()

4. 属性

#假设我们要或取每一个人的实际年龄
class Person:
    def __init__(self,name ,birth):
        self.name=name
        self.birth=birth
# 年龄应该是算出来的,而不是直接储存 ,如果有14亿人,每年都要更新一次,耗时耗力很大
        @property #将一个方法变更成一个属性,每次哪的属性的时候就会自动的去执行这个方法 ,#方法的返回值就是属性值
    def age(self):
        return 2018-self.birth
p1 = Person("武sir", "未知", 2000)
print(p1.age) # 看着像一个变量一样使用, 实际上这里是调用的一个方法
print(p1.age)
# p1.age = 26 # 不可以的, 因为age是一个方法. 不是一个变量

5 .私有(__XX就是私有) 

class Person:
  __qie='金莲' 
  def __init__(self,name,mimi):

    self.name=name
    self.mimi=mimi
def gaosu(self):

  print(f"把秘密告诉了太白, 第二天所有人都知道了{self.__mimi}")

私有一般是在前面加'__'就表示是私有的,用途一般是保护你不想让别人看到的东西,(例如:登录的用户名和密码,你怕忘记,可以写成是私有的)

原文地址:https://www.cnblogs.com/zty1304368100/p/10138799.html