#定义类
class Student:#class Student(父类):
#类属性
name='小伟'
#普通方法
def getAge(self):#self代表调用这个方法的对象(注意不是类)
print('小伟年龄:',self.age)
#创建对象1
xiaowei=Student()
#动态创建对象属性
xiaowei.age=12
#访问类属性
print(xiaowei.name)
print(Student.name)
#访问对象属性
print(xiaowei.age)
#访问普通方法
print(xiaowei.getAge())
#创建对象2
xiaowei2=Student()
#该对象并没有age对象属性,访问不了
print(xiaowei2.name)
#类方法与静态方法
'''
类方法:
特点:
1.定义需要依赖装饰器@classmethod
2.类方法中参数不是一个对象,而是类
3.类方法中只可以使用类属性,不能使用对象属性,他是对象没有出现时候就加载了.没有创建对象就可以Dog.age/Dog.test()
4.类方法不能使用普通方法
类方法作用:
因为只能访问类属性和类方法,所以可以实现在对象还没出现的动作
'''
class Dog:
age=13
def __init__(self,nickname):
self.nickname=nickname#使得每个创建该类的对象都能动态创建这个动态属性,因此无论是哪个对象都有这个属性
#普通方法,需要通过对象来调用
def run(self):#需要依赖于对象
print('{}在院子里跑来跑去'.format(self.nickname))
print(self.age)#对象可以使用类的属性
@classmethod#类方法,不需要参数self
def test(cls):
print(cls)
# print(cls.nickname) 1、类不能使用对象属性,这个类并没有这个属性
print(cls.age)
#2、不能调用run等普通方法
'''
静态方法:与类方法相似
1.需要装饰器@staticmethod
2.不需要参数self/cls
3.与类方法一样只能访问类的属性和方法,无法访问对象的属性或方法
4.加载时机同类方法
总结:
区别:
普通方法:
没有装饰器
参数是self
普通方法永远依赖对象,因此每个普通方法都有一个self
只有创建了对象才可以调用普通方法,否则无法调用
'''
class Person:
__age=18#私有类属性
def __init__(self,name):
self.name=name#动态给每个对象创建name的对象属性
@classmethod
def update_age(cls):
cls.__age=20
print('--->类方法')
@classmethod
def show_age(cls):
print('修改后的年龄是:',cls.__age)
@staticmethod
def test():#静态方法,由于没有参数,只能通过类名调用类属性和方法
print('--------->静态方法')
# print(self.name)语法错误
print(Person.__age)
Person.update_age()
Person.show_age()
Person.test()
'''
--------->静态方法
18
--->类方法
修改后的年龄是: 20
'''
'''
区别:
参数有无cls
静态方法装饰器@staticmethod,没有参数
类方法装饰器@classmethod,参数是cls
【其他都挺相似的,java中类方法就是静态方法】
都(只能)访问类的属性和方法
都可以通过类名调用访问
都可以在创建对象之前使用
1、类方法
@classmethod
def 方法名(cls[,参数]):
pass
类名.方法名()
对象.方法名()
2、静态方法
@staticmethod
def 方法([参数]):
pass
类名.方法名()
对象.方法名()
'''
python--总结之类和对象
最新推荐文章于 2022-10-15 15:34:25 发布