“人生最尊贵的事是什么?”
人生最尊贵的事情就是面对别人的虚伪与不义,仍能保持自己对别人的亲切!
要学会容忍人家,人家没有修,人家是凡人,你是有修的人,你是一个圣人,你是假我,别把你当成真的。人的修养是靠什么让人家来尊敬的?就是语言,行为。为什么叫修心修行,就是一个语言,一个行为,心里的行为。
总结:
- 每一次实例化都会产生完全不同的对象,内存地址相同只能当巧合,不能当真
- _init_ 方法中,默认必须是 return None
1.Python的类
class ClassName:
- 必须使用class关键字
- 类名必须是用大驼峰命名
- 类定义完成后,就产生了一个类对象,绑定到了标识符ClassName上
def add(x,y):
return x+y
class Person: # 类对象(非类的对象,注意区分)
pass
class MyClass:
"""A example class""" # #__doc__
x = 'abc' # 类属性
def foo(self): # 类属性foo,也是方法(看做函数)
# 本质上 x foo 都是类属性
return 'My Class'
print(MyClass.x)
print(MyClass.foo)
print(MyClass.__doc__)
#-------------------------------------------------
abc
<function MyClass.foo at 0x000002406FCCD048>
A example class
总结:
1. 方法是可以加 括号 调用的,
2.类对象及类属性和方法
类对象,类的定义就会生成一个类对象
类的属性,类定义中的变量和类中定义的方法都是类的属性
类变量,上例中x是类MyClass的变量
类的私有属性:双下划綫开头,或但下滑线开头;
MyClass中,x、foo都是类的属性, doc 也是类的属性foo方法是类的属性,如同 吃 是人类的方法,但是每一个具体的人才能吃东西,也就是说 吃 是人的实例才能调用的方法。
foo是方法对象method,不是普通的函数对象functions了,它一般要求至少有一个参数,第一个参数是self(self只是个惯用标识符,可以换名字),这个参数位置就留给了self。self 指代当前实例本身
类属性与方法:
类的私有属性
private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.private_attrs。类的方法
在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。类的私有方法
private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.private_methods。
3.构造函数(初始化)
很多类都倾向于将对象创建为有初始状态的。因此类可能会定义一个名为 init() 的特殊方法(构造方法),像下面这样:
类定义了 init() 方法的话,类的实例化操作会自动调用 init() 方法。所以在下例中,可以这样创建一个新的实例:
当然, init() 方法可以有参数,参数通过 init() 传递到类的实例化操作上。例如:
类的实例化与初始化
self代表类的实例,而非类
实例化 Class()
每一次实例化只能生成该类的具体实例,
每一次实例化都会产生完全不同的对象,内存地址相同只能当巧合,不能当真
a = MyClass() # 实例化,相当于对类进行调用;
使用上面的语法,在类对象名称后面加上一个括号,就调用类的实例化方法,完成实例化。
实例化就真正创建一个该类的对象(实例)。例如
tom = Person()
jerry = Person()
上面的tom、jerry都是Person类的实例,通过实例化生成了2个实例。
每次实例化后获得的实例,是不同的实例,即使是使用同样的参数实例化,也得到不一样的对象。
Python类实例化后,会自动调用 init 方法。这个方法第一个参数必须留给self,其它参数随意。(特殊方法)
初始化 _init_方法
MyClass()实际上调用的是 init(self) 方法,可以不定义,如果没有定义会在实例化后隐式调用。
作用:对实例进行初始化
class MyClass:
def __init__(self):
print('init')
print(MyClass) # 不会调用
print(MyClass()) # 调用__init__
a = MyClass() # 调用__init__
print(a)
#-------------------------------------------------
<class '__main__.MyClass'>
init
<__main__.MyClass object at 0x000002406FCB8E10>
init
# 每一次的调用都不同;
class Person:
def __init__(self):
print('init',id(self))
print(Person) #不会调用
print('-'*30)
tom = Person() #实例化
print(tom,hex(id(tom)))
jerry = Person() # 调用init
print(jerry,hex(id(jerry)))
#----------------------------------------------------------------------------------------------------
<class '__main__.Person'>
------------------------------
init 2475813918872
<__main__.Person object at 0x0000024072025898> 0x24072025898
init 2475813859224
<__main__.Person object at 0x0000024072016F98> 0x24072016f98
#初始化 相当于 传参数;
class Person:
def __init__(self, name, age):
print('init',hex(id(self)))
self.name = name
self.age = age
print(Person)
tom = Person('Tom', 20) # 实例化,会调用__init__方法并为实例进行属性的初始化
jerry = Person('Je', 25)
print(tom,jerry)
print(tom.name,jerry.name)
print(tom.age,jerry.age)
#--------------------------------------------------
<class '__main__.Person'>
init 0x2407202a710
init 0x2407202a9b0
<__main__.Person object at 0x000002407202A710> <__main__.Person object at 0x000002407202A9B0>
Tom Je
20 25
网友评论