class详解 | python

一、类的成员–变量

在类中变量成员分为两类:实例变量(字段)和类变量(静态变量)

(1)实例变量:每一个实例都应该拥有自己的变量,实例变量是给对象用的。

(2)类变量:类变量是属于类的,只有通过类名调用才能更改类变量的值。

class Person:
    coutry="中国" #在此处申明类变量
    def __init__(self,name ,age): #构造方法,在此处声明实例化变量
        self.name=name  #实例变量
        self.age=age

# Person.coutry="大庆" #通过类 修改类变量

mt=Person("马化腾",18)
mt.company="腾讯" #添加实例变量
mt.coutry="大庆" #即使类变量中存在country,对象不能直接对类变量修改,只会在自己对象中添加实例化变量
print(mt.age) #18
print(mt.company)#腾旭
print(mt.coutry)    #对象.变量 :寻找的方法,首先现在对象的属性中寻找,如果找到直接,停止寻找,并返回,否则继续向类变量寻找
al=Person("曹操",135)
print(al.age) #135
print(al.coutry)#中国
# 类变量的修改只能通过类修改 
二、类的成员—方法
  1. 成员方法(实例方法)
class Cat:
    def chi(self):
        print("猫喜欢吃鱼")
c=Cat()
c.chi()#猫喜欢吃鱼
  1. 静态方法:类里面定义一个普通的函数(与外部函数一样)
    格式:@staticmethod + 函数定义的方法
class Static( ):
    @staticmethod
    def chi():#静态方法,不需要传递self参数,与普通函数一样
        print("我是一个静态的吃吃")
s=Static()
s.chi() #我是一个静态的吃吃
  1. 类方法:不管是对象还是类访问该方法,接受到的值都是类
    格式:@classmethod + 函数定义的方法(cls)
class Class():
    @classmethod
    def say(cls):#第一个位置自动产生一个cls,接受一个类
        print(cls)
        print("我是类方法,我接受的值是类")
c=Class()
c.say() #<class '__main__.Class'> 我是类方法,我接受的值是类
Class.say() #<class '__main__.Class'> 我是类方法,我接受的值是类

类方法/静态方法和实例方法有什么区别?

类方法:一般只由类调用,不推荐用实例调用,有默认传递的参数cls,默认传递的参数是类;
实例方法:实例方法由实例对象调用,有默认传递的参数self,默认参数是对象本身;
静态方法:可以由类和实例对象调用,没有默认参数;
三、类的成员—属性

属性一般在__init__(self)中创建,但是有时候我们的属性需要计算,这个时候属性就不能直接在__init__中声明,此时需要利用函数的属性化。

import datetime # 插入时间模块

class Person:
    def __init__(self,name,birthday,email):
        self.name=name
        self.birthday=birthday
        self.email=email
	
	# 要求需要定义一个age属性
	@property # 把方法转换为属性,对象属性的书写,self.age
	def age(self): # 方法中只有一个参数self
		now_time = int(datetime.datetime.now()) # 获取当前的年份的数值:2018
		return now_time - int(self.birthday.strip().split("-")[0]) # 2018-2014

c = Person("小鸡", "2014-10-15", "123a45@qq.com")
print(c.age) # c.age 得到年龄属性 结果:4

总结:
(1)方法参数只有一个self
(2)方法中需要书写@property;
(3)调用的时候,不需要带括号,直接当初对象的属性变量来用就可以;
(4)这种套路只能取值,不能设置值。

四、私有

私有方法的表示方法:__方法__变量__类
在python中使用__作为方法或者变量的前缀,那么这个方法或者变量就是一个私有的。

1.私有变量

 Person:
    def __init__(self,name,laopo,):
        self.name=name
        self.__laopo=laopo#私有变量,老婆是自己的,别人不能用
    def look(self):
        print(self.__laopo)
r=Person("周杰伦","昆仑")
r.look() #通过内部函数访问 昆仑
print(r.__laopo)#type object 'Person' has no attribute '__laopo'
  1. 私有方法
class Yue:
    def __yue(self):
        print("我要出去约约约")
    def chi(self):
        print("吃什么")
    def __play(self):
        print("玩什么")
r=Yue()
r.chi()
r.__yue() #'Yue' object has no attribute '__yue' 报错
r.__play  #'Yue' object has no attribute '__play' 报错
  1. 私有类和私有静态方法不再赘述了,与私有的其他的方法一样

总结:
(1)私有方法不能被外部访问,只能通过内部访问;
(2)无法被继承;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值