[面向对象:类与对象、属性查找、一切皆对象]

时间:2021-04-13 12:44:30   收藏:0   阅读:0

[面向对象:类与对象、属性查找、一切皆对象]

--------------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------

对象的名称空间里只存放着对象独有的属性,而对象们相似的属性是存放于类中的。对象在访问属性时,会优先从对象本身的__dict__中查找,未找到,则去类的__dict__中查找
class Student:
    school = "上海校区"
    #            空对象, "egon", 18, "male"
    def __init__(self, x, y, z):
        self.name = x  # 空对象.name = "egon"
        self.age = y   # 空对象.age = 18
        self.gender = z  # 空对象.gender = "male"

    def tell_info(self):
        print(‘my name is %s my age is %s my gender is %s‘ % (self.name, self.age, self.gender))


    def func(self):
        pass

obj1 = Student("egon",18,"male")
obj2 = Student("tom",19,"female")

# 对象.属性的查找顺序: 先从对象的字典里找,再从类的字典里找

print(obj1.name)  # obj1.__dict__["name"]
print(obj1.school)
print(obj1.tell_info)

obj1.school = "XXX"
print(obj1.school)  # xxx 说明优先从对象字典里找


# 类.属性:从类自己的字典里找(类中属性之所以可以自己调,其实是因为类的属性是为对象准备的)
print(Student.school)
print(Student.__init__)
print(Student.tell_info)

# 类中的数据属性是直接共享给所有对象用的,指向相同的内存地址
Student.school = ‘XXXXX‘
obj1.school = ‘YYYYY‘
print(Student.school,id(Student.school)) # 上海校区 1994529963920
print(obj1.school,id(Student.school))    # 上海校区 1994529963920
print(obj2.school,id(Student.school))    # 上海校区 1994529963920


# 类中的函数类可以可用,如果类来调用就是一个普通函数,该怎么传参就怎么传
# 但其实类中的函数是给对象用,对象来调用就是一个绑定方法,绑定方法的特点是会将调用当做第一个参数自动传入
print(Student.tell_info)
Student.tell_info(obj1)
Student.tell_info(obj2)

print(obj1.tell_info)
obj1.tell_info()
obj2.tell_info()

Student.func()
obj1.func()

# 自定义类型:Student

class Student:
    n = 0

    def __init__(self, name, age, gender):
        Student.n += 1
        self.name = name
        self.age = age
        self.gender = gender

    def choose(self):  # self = obj1
        print(‘hello %s‘ %self.name)  # obj1.name


obj1 = Student("egon1", 18, "male")
print(type(obj1))  # 查看对象的类型
# <class ‘__main__.Student‘>
print(Student)     # 查看类跟对象类型一样,说明类等同于类型
# <class ‘__main__.Student‘>
print(list)
# <class ‘list‘>

obj1.choose()
# hello egon1
Student.choose(obj1)
# hello egon1

# 内置类型:list
l1 = list([1,2,3])
# print(l1)
# l1.append(4)
list.append(l1,4)
print(l1)

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!