关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回

类的基本使用

发布时间:2022-09-11 23:36:39


# class MyClass:

#     """A example class"""

#     age = 300

#     def __init__(self,name,age):

#         self.name = name

#         self.age = age

#     def showage(self):

#         print("{}is a student{}".format(self.name,self.age))

# tom = MyClass("lijiabin",18) #实例化 tom是实例

#

# print(tom.age,tom.name) ##tom.age是实例的变量

# print(MyClass.age)

# tom.showage() #实例化后每个实例可以享用对象的方法 类实例化后,得到一个实例对象,实例对象会绑定方法,调用方法时采用jerry.showage()的方式。

#通俗的说就是 实例在调用类的方法时候 自身的属性特点也会一起带着!!!!!!!!!!!




#实例变量和类变量

##tom.age是实例的变量

#实例变量是每一个实例自己的变量,是自己独有的;类变量是类的变量,是类的所有实例共享的属性和方法




# 特殊属性 含义

# __name__ 对象名

# __class__ 对象的类型

# __dict__ 对象的属性的字典

# print(MyClass.__name__)

# print(MyClass.__class__)

# print(type(MyClass))  ##等价于.__class__

# print(MyClass.__dict__.items()) ##__dict__返回一个字典


# print("++++++++++++++++++++++++++")

# tom = MyClass("tp",19)

# print(tom.__class__)

# print(tom.__dict__)  ##实例的字典和属性  通俗的讲就是tom属于人类 tom的属性在自己的×××上

# print(type(tom.__class__.__name__))#tom的类的名字 就是一个连环拼接,返回一个字符串

#

#

#

# class Person:

#     age = 3

#     height = 170

#     def __init__(self, name, age=18):

#         self.name = name

#         self.age = age

# tom = Person('Tom') # 实例化、初始化 ¥¥¥¥¥¥¥¥每一个个体调用的时候必须先初始化

# jerry = Person('Jerry', 20)

# Person.age = 30

# print(Person.age, tom.age, jerry.age) # 输出什么结果

#

# print(Person.height, tom.height, jerry.height) # 输出什么结果

# jerry.height = 175  ###给个体增加属性 可以在个体的字典里查到

# print(Person.height, tom.height, jerry.height) # 输出什么结果

# # tom.height += 10

# # print(Person.height, tom.height, jerry.height) # 输出什么结果

# # Person.height += 15

# # print(Person.height, tom.height, jerry.height) # 输出什么结果

# Person.weight = 70

# print(Person.weight, tom.weight, jerry.weight) # 输出什么结果

# # print(tom.__dict__['height'])

# print(tom.weight) # 可以吗

# 指的是实例使用 .点号 来访问属性,会先找自己的 __dict__ ,如果没有,然后通过属性 __class__ 找到自己的

# 类,再去类的 __dict__ 中找

# 注意,如果实例使用 __dict__[变量名] 访问变量,将不会按照上面的查找顺序找变量了,这是指明使用字典的key

# 查找,不是属性查找。



#给一个类增加一个属性可以写入 也可以通过之前学过的装饰器来完成 想装饰器的作用就是给一个函数加一个发卡 包装一下这个函数

# 注意书写等价式


# def decorate(name): #增加姓名

#     def inner(cls): #class

#         cls.Name = name

#         return cls

#     return inner

#

# @decorate("tom")    # Person = decorate("tom")(Person)-> inner(Person)

# class Person:

#     Age = 11

#

# print(Person.__dict__)

#


#类方法

# class Person:

#     @classmethod  #

#     def class_method(cls): # cls是什么 是类的方法

#         print('class = {0.__name__} ({0})'.format(cls))

#         cls.HEIGHT = 170

#1. 在类定义中,使用@classmethod装饰器修饰的方法

# 2. 必须至少有一个参数,且第一个参数留给了cls,cls指代调用者即类对象自身

# 3. cls这个标识符可以是任意合法名称,但是为了易读,请不要修改

# 4. 通过cls可以直接操作类的属性


#

# Person.class_method()

# print(Person.__dict__)




# 类方法的调用

# class Person:

#     def normal_method():

#         print('normal')

#     def method(self):

#         print("{}'s method".format(self))

#     @classmethod  #类方法 给类定义的属性

#     def class_method(cls): # cls是什么

#         print('class = {0.__name__} ({0})'.format(cls))

#         cls.HEIGHT = 170

#     @staticmethod   #静态方法  无需增加参数 静态方法,只是表明这个方法属于这个名词空间。函数归在一起,方便组织管理

#     def static_methd():

#         print('Person.HEIGHT')



# print('~~~~类访问')

# print(1,Person.normal_method()) # 可以吗

# print(2, Person.method()) # 可以吗 类中的方法是给实例准备的 要穿self才能用 通俗的说就是人类不能去用个体户的功能,他是每个个体独有的 要是人类能看 所有个体就都能看 有违逻辑

# print(3, Person.class_method()) # 可以吗

# print(4, Person.static_methd()) # 可以吗 keyi

# print(Person.__dict__)

# print('~~~~实例访问')

# print('tom----')

# tom = Person()

# # print(1, tom.normal_method()) # 可以吗 不可以 实例必须给定参数 否则不能调用

# print(2, tom.method()) # 可以吗

# print(3, tom.class_method()) # 可以吗?

# print(4, tom.static_methd()) # 可以吗

# print('jerry----')

# jerry = Person()

# # print(1, jerry.normal_method()) # 可以吗

# print(2, jerry.method()) # 可以吗

# print(3, jerry.class_method()) # 可以吗?

# print(4, jerry.static_methd()) # 可以吗



# 总结:

# 类除了普通方法都可以调用,普通方法需要对象的实例作为第一参数。

# 实例可以调用所有类中定义的方法(包括类方法、静态方法),普通方法传入实例自身,静态方法和类方法需要找

# 到实例的类。



# 通过方法控制实例的属性 可以学习一下

# class Person:

#     def __init__(self, name, age=18):

#         self.name = name

#         self.age = age

#     def growup(self, i=1):

#         if i > 0 and i < 150: # 控制逻辑

#             self.age += i

# p1 = Person('tom')

# p1.growup(20) # 正常的范围

# print(p1.age)

# p1.age = 160 # 超过了范围,并绕过了控制逻辑

# print(p1.age)




# 补丁

# 可以通过修改或者替换类的成员。使用者调用的方式没有改变,但是,类提供的功能可能已经改变了。

# 猴子补丁(Monkey Patch):

# 在运行时,对属性、方法、函数等进行动态替换。

# 其目的往往是为了通过替换、修改来增强、扩展原有代码的能力。

# 黑魔法,慎用。


另外有需要云服务器可以了解下风纳云fengnayun.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


/template/Home/Dawn/PC/Static

选择风纳云,也许是您成就一番大事业的开端

注册账号