Python--oop面向对象的学习1

Posted clairedandan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python--oop面向对象的学习1相关的知识,希望对你有一定的参考价值。

类和对象的成员分析

·类和对象都可以存储成员,成员可以归类为所有,也可以归对象所有

·类存储成员时使用的是与类关联的一个对象

·独享存储成员时存储在当前对象中

·对象访问一个成员,如果对象中没有该成员,尝试访问类中的同名成员

   如果对象中有此成员,一定使用该对象中的成员

·创建对象的时候,类中的成员不会自动放到对象当中,而是得到一个空的对象,没有成员

·通过对象对类中成员重新赋值或者通过对象添加成员,对应成员会被保存在对象中,而不会修改类成员 

class student():
name = "claire"
age = 18
def say(self):
self.name = "lala"
self.age = 25
print(student.name)
print(student.age)
print(id(student.name))
print(id(student.age))
print("*"*20)
A = student()
print(student.__dict__)
print(A.__dict__)
A.name = "tony"
A.age = 20
print(A.name)
print(A.age)
print("*"*20)
print(id(A.name))
print(id(A.age))

claire
18
2633264420040
140709556217008
********************
{‘__module__‘: ‘__main__‘, ‘name‘: ‘claire‘, ‘age‘: 18, ‘say‘: <function student.say at 0x000002651AF2BC80>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘student‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘student‘ objects>, ‘__doc__‘: None}
{}
tony
20
********************
2633267041312
140709556217072

关于self

·self在对象的方法中表示当前对象本身,但是如果通过对象调用一个方法,那么该对象会自动传入到当前的第一个参数当中

·self并不是一个关键字,只是一个接受对象的普通参数,理论上用任何一个普通变量代替

·方法中有self形参的方法非绑定的方法,可以通过对象访问,没有self的是绑定类的方法,只能通过类访问

`使用类访问绑定类的方法时,如果类方法中需要当前类的成员,可以通过__class__来实现。--如下面的第三个脚本

 

 1 class student():
 2     name = "claire"  
 3     age = 18
 4     def say(self):    
 5         self.name = "lala"  #对象的name
 6         self.age = 25    #对象的name
 7         print("my name is {0}".format(self.name))
 8         print("my age is {0}".format(self.age))
 9 dandan = student()
10 dandan.say()
my name is lala
my age is 25
class student():
    name = "claire"
    age = 18
    def say(self):
        self.name = "lala"
        self.age = 25
        print("my name is {0}".format(self.name))
        print("my age is {0}".format(self.age))
    def sayagain():
        print("hello,nice to see you again")
dandan=student()
dandan.say()
#dandan.sayagain()  会报TypeError: sayagain() takes 0 positional arguments but 1 was given
student.sayagain() #调用绑定类函数使用类名
my name is lala
my age is 25
hello,nice to see you again
 1 class student():
 2     name = "claire"
 3     age = 18
 4     def say(self):
 5         self.name = "lala"
 6         self.age = 25
 7         print("my name is {0}".format(self.name))
 8         print("my age is {0}".format(self.age))
 9         print("lei‘s age is {0}.".format(__class__.age))
10     def sayagain():
11         print(__class__.name)
12         print(__class__.age)
13         print("hello,nice to see you again")
14 dandan=student()
15 dandan.say()
16 student.sayagain()
my name is lala
my age is 25
leis age is 18.
claire
18
hello,nice to see you again
 1 class A():
 2     name="haha"
 3     age=18
 4     def __init__(self):
 5         self.name ="dandan"
 6         self.age = 20
 7     def say(self):
 8         print(self.name)
 9         print(self.age)
10 class B():
11     name = "bbb"
12     age = 90
13 a = A()    #此时,系统会默认把a作为第一个参数传入函数
14 a.say()
15 A.say(a)    #此时self被a代替
16 A.say(A)    #此时可以把A作为参数,直接调用了类
17 A.say(B)  #此时传入的是类实例B,因为B具有name 和age属性,所以不会报错
dandan
20
dandan
20
haha
18
bbb
90

 

 

以上是关于Python--oop面向对象的学习1的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

PHP面向对象之选择工厂和更新工厂

Python面向对象学习之八,装饰器

代码学习PHP面向对象之类与对象

java学习---面向对象进阶