类和对象
class Student():
pass
print(Student, type(Student))
stu1 = Student()
stu2 = Student()
print(stu1, type(stu1))
print(stu2, type(stu2))
print(isinstance(stu1, Student))
'''
Python 中的类也是对象数据类型,用来创建对象的对象
定义类,实质上就是创建一个 type 类型的对象
可以向对象中添加变量,对象中的变量通常称之为属性:对象.变量=值
'''
print(id(Student), type(Student))
stu1.name = "cris"
print(stu1.name)
'''
类的定义
- 类和对象都是对现实生活中的事物或程序中的内容的抽象
- 实际上所有的事物都由两部分构成:
1.数据(属性)
2.行为(方法)
- 在类的代码块中,我们可以定义变量和函数,
变量会成为该类实例的公共属性,所有的该类实例都可以通过对象.属性名 的形式访问
函数会成为该类实例的公共方法,所有该类实例都可以通过对象.方法名() 的形式调用方法
- 注意:
方法调用时,第一个参数由解析器自动传递(就是self 参数,类似Java 的this),所以定义方法时,至少要定义一个形参(self)!
- 实例为什么能访问到类中的属性和方法?
类中定义的属性和方法都是公共的,任何该类实例都可以访问
- 属性和方法查找的流程
当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,
如果有,则直接返回当前的对象的属性值,
如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,
如果类对象中依然没有,则报错!
- 类对象和实例对象中都可以保存属性(方法)
- 如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中
- 如果这个属性(方法)是某个实例独有,则应该保存到实例对象中
- 一般情况下,属性保存到实例对象中
而方法需要保存到类对象中(和 Java 截然不同!)
'''
class Person:
name = "cris"
age = 22
def hello(self):
print(f'hello,{self.name}')
print(Person.age)
print(Person.name)
p1 = Person()
print(p1.name)
print(p1.age)
p1.name = 'james'
print(p1.name)
del p1.name
print(p1.name)
p1.hello()
构造方法及简单练习
class Student:
def hello(self):
print(f'hello,{self.name}')
s1 = Student()
s1.name = 'cris'
s1.hello()
s2 = Student()
s2.name = "james"
s2.hello()
'''
Python中的类可以定义一些特殊方法(魔术方法),这些方法都是以__开头,__结尾,对象创建过程中解析器自动执行,不要尝试自己去调用
构造方法(__init__):通过构造方法来确保创建的对象拥有必须的属性
p1 = Person()的运行流程
1.创建一个变量
2.在内存中创建一个新对象
3.__init__(self)方法执行(每次创建新对象都会调用,self 类似Java 中的this)
4.将对象的id赋值给变量
'''
class Teacher:
def __init__(self, name):
self.name = name
def sayhello(self):
print(f'hello,{self.name}')
print('haha,%s' % self.name)
t1 = Teacher('cris')
print(t1.name)
t1.sayhello()
t2 = Teacher('rose')
t2.sayhello()
'''
类的基本结构
class 类名([父类]) :
公共的属性...
# 对象的初始化方法
def __init__(self,...):
...
# 其他的方法
def method_1(self,...):
...
def method_2(self,...):
...
...
'''
class Dog(object):
def __init__(self, name: str, age: int, type: str):
super(Dog, self).__init__()
self.name = name
self.age = age
self.type = type
def eat(self):
print(f'{self.name} is eating!')
def introduce(self):
print(
f'my name is {self.name},my age is {self.age}, my type is {self.type}!')
d1 = Dog('cris', 22, '单身狗')
d2 = Dog('haha', 11, '土狗')
d3 = Dog('simida', 12, '二哈')
d1.eat()
d2.introduce()