python中类的介绍

1 基本概念

1 类(class):用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。

对象是类的实例。

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量,用于处理类及其实例对象的相关数据。
实例变量:定义在方法中的变量,只作用于当前实例的类。
实例化:创建一个类的实例,类的具体对象
方法:类中定义的函数
对象:通过类定义的数据结构的实例。对象包括两个数据成员(类变量和实例变量)和方法。
(用来接收类 p =People(),如果在init中定义了参数,在这里也可以传入进去)
总结:类相当于模板,对象相当于模板的生成的产品,方法就是类中定义的函数。
通过以下代码,来熟悉相关名词

class people(object):
    name =''
    sex = False
    age = 0
    height = ''
    weight = ''
    sleep = ''
# 以上几个变量是一个类变量,它的值将在这个类的所有实例之间共享,可以在类的内部或者外部通过people.name实现
    def eat(self):
        print('人类出生就会吃')
    def sleep(self):
        print('人类天生会睡觉')
    def work(self):
        print('每个人都有劳动的权利')

# 创建一个对象叫做p
p = people()
p.name = '张三'
p.age = 17
p.sex = False
p.height = 176
p.weight = '70kg'

print(p) 
# 输出:<__main__.people object at 0x0221F810>
print(p.name)
# 输出: 张三
p.eat()
# 输出:人类出生就会吃
p.work()
# 输出:每个人都有劳动的权利

2 . 类的初始化方法与实例:
init()方法是一种特殊的方法,被称为类的构造函数或初始化方法,init 初始化 魔术方法的一种,用来初始化对象。
在创建对象的时候,init方法会自动调用,也就是说当创建了这个类的实例时就会调用该方法
在初始化的时候,可以直接给参数增加默认值
self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数 (可以认为是一种格式)

class people(object):

    def __init__(self,name, age, sex,height='178'):
        self.name = name
        self.age = age
        self.sex = sex
        self.height = height

    def study(self):
        print('只有学习才能让我感到快乐')

# 在创建对象的时候,直接赋值。
p = people('李四',17,True,height='19')
print(p.name)
# 输出:李四
print(p.height)
# 输出:19
  1. 对象属性与类属性的调用
    先看如下代码
class People(object):
    # 类变量
    name = '道德经'
    age = '19'

    def __init__(self, fond=''):
        # 对象属性
        self.fond = fond
    # 对象方法 ,self 表示
    def say(self):
        print('Hello')

(1) ‘对象属性’不能通过类名+属性的方式来调用,只能通过对象来调用

print(People.fond)
# 输出:AttributeError: type object 'People' has no attribute 'fond'

(2) ‘类属性‘可以通过类名+属性的方式来调用 ,也可以通过对象来调用

print(People.age)
# 输出:19

(3)对象方法可以通过对象+方法名 这种形式调用

p1.say()
# 输出:Hello

(4)也可以通过类名 + 方法名,然后将‘’对象‘’当成参数传入方法中这种形式来调用

People.say(p1)
#输出: Hello
  1. 私有属性:
    类的私有属性:两个下划线开头,声明该属性私有,不能在类的外部被使用或直接访问,
    在类内部的方法中使用时self.__private_attrs
    类的方法:在类的内部,使用def关键字可以为类定义一个方法,与一般函数不同,类方法必须包含参数self,且为第一个参数
    类的私有方法: __private_method:两个下划线开头,声明该方法为私有方法,
    不能在类的外部调用。在类的内部调用self.__private_methods

单下划线、双下划线、头尾双下划线说明:
foo:定义的是特殊方法,一般是系统定义的名字,类似init()之类的。
_foo:以单下划线开头的表示的是protected类型的变量,即保护类型 只能允许其本身与子类进行访问,不能用于from module import *
__foo: 双下划线表示的是私有类型(private)的变量,只能允许这个类本身进行访问了

class JustCounter:
    __secretCount = 0 # 私有类变量
    publicCount = 0  # 公开类变量

    def count(self):
        self.__secretCount +=1
        self.publicCount +=1
        print(self.secretCount)
        #print(self.publicCount)
counter = JustCounter()
counter.count()
counter.count()

# print(counter.publicCount)  # 输出:1 2 2
print(counter.__secretCount)
# 输出:AttributeError: 'JustCounter' object has no attribute 'secretCount'

python 不允许实例化的类访问私有数据,但是可以使用 object.className__attrName(对象名.类名__私有属性名) 访问属性 如下代码:

class Runnob(object):
    __site = 'www.runnob.com'
runnob = Runnob()
print(runnob._Runnob__site)
# 输出:www.runnob.com

再来一个例子巩固一下:

class people(object):
    def __init__(self, name='', sex='', age='16', fond='学习'):
        self.name = name
        self._sex = sex
        self.__age = age
        self.__fond = fond

p = people

p.name = '张三'
print(p.name)
# 输出: 张三
p._sex = '男'
print(p._sex)
# 输出:男
# 能获取到 __age的值
# 用类调用的属性
print(p._people__age)  
# 输出16

p.__age = '17'
print(p.__age)      
# 输出:17
p.grilFriend = '小美'
print(p.grilFriend)
# 如果有这个属性, 则修改属性值
# 如果没有,则添加。
# 跟字典的很相近

总结: 如果是单下划线,可以通过p._name = ‘小张’ 这种方式使用
如果是双下划线,可以通过,p._people__name 这种方式使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值