作为一个Python初学者,我想通过写博客的方式来记录下来自己成长的过程,同时也分享一下自己学习到的知识。以下都是一个Python初学者对Python语言的一些浅见和个人理解。
```python
class Student:
def __init__(self,name,score):
self.name = name
self.score = score
def say_score(self):
print("{0}的分数是:{1}".format(self.name,self.score))
s1 = Student("哈哈",400)
s1.say_score()
#下面的操作会往s1引用的对象里添加age和salary两个属性
```python
s1.age = 18
s1.salary = 50000
#dir(obj)可以获得对象的所有属性、方法
print(dir(s1))
#obj.dict 对象的属性字典
print(s1.__dict__)
#pass 空语句
class Man:
pass
#isinstance(对象,类型) 判断“对象”是不是“指定类型”
print(isinstance(s1,Student))
print(isinstance(s1,Man))
#类属性 和 实例属性 c
lass Student:
company = 'ayg'
count = 0
def __init__(self,name,score):
self.name = name
self.score = score
Student.count = Student.count + 1
def say_score(self):
print("我的公司是:",Student.company)
print(self.name,"的分数是:",self.score)
s1 = Student("哈哈",80)
s1.say_score()
print("一共创建{0}个Student对象".format(Student.count))
#类方法 ‘’’ 类方法是从属于“类对象”的方法。类方法通过装饰器 @classmethod 来定义,格式如下: @classmethod def 类方法名(cls [,形参列表]): 函数体 1.@classmethod 必须位于方法上面一行 2.第一个cls必须有;cls指的就是“类对象”本身 3.调用类方法格式:“类名.类方法名(参数列表)”。参数列表中,不需要也不能给cls传值 4.类方法中访问实例属性和实例方法会导致错误 5.子类继承父类方法时,传入cls是子类对象,而非父类对象 ‘’’
class Student:
company = 'ayg'
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod
def printCompany(cls):
print(cls.company)
Student.printCompany()
#静态方法 ‘’’ Python中允许定义与“类对象”无关的方法,称为“静态方法” “静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了“类的名字空间里面”,需要通过类调用 静态方法通过装饰器 @staticmethod 来定义,格式如下: @staticmethod def 静态方法名([形参列表]): 函数体 1.@staticmethod必须位于方法上面一行 2.调用静态方法格式:”类名.静态方法名(参数列表)“ 3.静态方法中访问实例属性和实例方法会导致错误 ‘’’
class Student2:
company = 'ayg'
def __init__(self,name,age):
self.name = name
self.age = age
@staticmethod
def add(a,b):
print("{0}+{1}={2}".format(a,b,a+b))
return a+b
Student2.add(20,30)
#__del__方法(析构函数)和垃圾回收机制 ‘’’ __del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象占用的资源,例如:打开文件资源、网络连接等 Python实现自动的垃圾回收,当对象没有被引用时(引用计数为0),由垃圾回收器调用__del__方法 我们也可以通过del语句删除对象,从而保证调用__del__方法 系统会自动提供__del__方法,一般不需要自定义析构方法
‘’’
class Person:
def __del__(self):
print("销毁对象:{0}".format(self))
p1 = Person()
p2 = Person()
del p2
print("程序结束")
#__call__方法和可调用对象 #定义了__call__方法的对象,称为可调用对象,即该对象可以像函数一样被调用
class SalaryAccount:
'''工资计算类'''
def __call__(self, salary):
print("算工资了....")
yearSalary = salary*12
daySalary = salary//22.5
hourSalary = daySalary//8
return dict(yearSalary=yearSalary,monthSalary = salary,daySalary=daySalary,hourSalary=hourSalary)
s = SalaryAccount()
print(s(50000))
#方法没有重载,定义多个重名的方法,只有最后一个方法有效
#方法的动态性:Python是动态语言,我们可以动态的为类添加新的方法,或者动态的修改类的已有的方法
class Person:
def work(self):
print("努力上班")
def play_game(s):
print("{0}在玩游戏".format(s))
def work2(s):
print("好好工作,努力上班!赚大钱")
Person.play = play_game
p = Person()
p.work()
p.play()
Person.work = work2
p.work()
#私有属性和私有方法(实现封装) ‘’’ Python对于类的成员没有严格的访问控制限制: 1.通常约定,两个下划线尅头的属性是私有属性。其他为公共属性 2.类内部可以访问私有属性(方法) 3.类外部不能直接访问私有属性(方法) 4.类外部可以通过“__类名__私有属性(方法)名”访问私有属性(方法) ‘’’
class Employee:
def __init__(self,name,age):
self.name = name
self.__age = age
def __work(self):
print("好好工作,赚大钱")
e = Employee("哈哈",18)
print(e.name)
print(e._Employee__age)
e._Employee__work()
@property 可以将一个方法的调用方式变成“属性调用”。
class Employee:
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
@property
def salary(self):
return self.__salary
@salary.setter
def salary(self,salary):
if 1000 < salary < 50000:
self.__salary = salary
else:
print("录入错误!薪水在1000-50000这个范围")
emp1 = Employee("哈哈",30000)
print(emp1.salary)
emp1.salary = -2000
print(emp1.salary)
'''
def get_salary(self):
return self.__salary
def set_salary(self,salary):
if 1000<salary<50000:
self.__salary = salary
else:
print("录入错误!薪水在1000-50000这个范围")
emp1 = Employee("哈哈",30000)
print(emp1.get_salary())
emp1.set_salary(-20000)
print(emp1.get_salary())
'''
|